Failing to use b2/bjam including libraries with Clang
I am still failing to get Clang on Windows 10 to work with b2/bjam *linking to libraries*. I have a few simple test cases, using Boost.System to display an error code ,using Boost.Test for a 'hello World" use of Boost.Test, and a simple regex example1 linking to Boost.Regex library. All links to libraries are static (to avoid reported problems with DLL and Clang). I have tried to use the LLD linker http://releases.llvm.org/6.0.0/tools/lld/docs/ReleaseNotes.html as some have recommended this, but not successfully with libraries, so far. Things that DO work OK with Clang 6.0.0 are 1 Visual Studio IDE (using Boost prebuilt libraries) Platform Toolset = llvm-2014 and MS linker only. 2 Codeblocks IDE (mingw64 on windows 10) (using normal Boost prebuilt libraries as part of the normal install) and clang++.exe. (But NOT when using the LTO lld.exe linker getting error: Expected a single module ???- but I am not trying to use C++ modules!). 3 Using b2/bjam to run a *single* exe (no libraries). jamfile is just [ run hello_boost.cpp ] with >b2 toolset=gcc-7.2.0,msvc-14.1,clang-6.0.0 4 Using all examples in jamfile b2/bjam with libraries with toolset=gcc-7.2.0,msvc-14.1 (so I am confident that it is not a problem with the C++ or the jamfile). What *doesn't work* is b2/bjam using a library with toolset=clang-6.0.0, neither using clang++ linker nor using LTO llvm-lld.exe. And since I want to write b2 -a -j6 --debug-configuration -d2 toolset=msvc-14.1,gcc-7.2.0,clang-6.0.0 address-model=64 > my.log this is most disappointing :-( My user-config.jam contains using clang : # Version. 6.0.0 : # Location of Clang compiler .exe file(s). "C:/LLVM/clang-600/LLVM/bin/clang++.exe" : # Options. <compileflags>-v <compileflags>-m64 <compileflags>-fmsc-version=1900 <compileflags>--target=i686-pc-windows-msvc <define>_CRT_SECURE_NO_DEPRECATE <define>_CRT_SECURE_NO_WARNINGS <cxxflags>-std=c++17 <cxxflags>-flto=thin <<<<<<< if trying to use LTO lld linker <cxxflags>-Wno-deprecated <cxxflags>-Wno-deprecated-declarations <linkflags>-v <linkflags>-fuse-ld=lld <<<<<<< if trying to use LTO lld linker <linkflags>-flto=thin <<<<<<< if trying to use LTO lld linker <linkflags>--verbose <linkflags>-m64 <linkflags>--target=i686-pc-windows-msvc <linkflags>-lmsvcrt The Boost.Test and Boost.System libraries are built as expected (for Clang) at "..\..\..\bin.v2\libs\system\build\clang-gnu-linux-6.0.0\release\address-model-64\link-static\threadapi-win32\libboost_system-clang6 0-x64-1_66.lib" my jamfile contains lines like [ run hello_boost_system.cpp ../../system/build//boost_system/<link>static ] [ run hello_boost_test.cpp : : : <library>/boost/test//boost_unit_test_framework/<link>static ] After trying a bewildering array of linkers, and many options, I finally always end up with a series of link failures with errors either like error: lto.tmp: undefined symbol: ? system_category@system@boost@@YAAEBVerror_category@12@XZ or a missing entry point: LINK : fatal error LNK1561: entry point must be defined (This appears to be a message from MSVC, not the lld linker?) clang-linux.link ..\..\..\bin.v2\libs\hello_boost_test\test\hello_boost_system.test\clang-gnu-linux-6.0.0\release\address-model-64\threadapi-win32\he llo_boost_system.exe "C:/LLVM/clang-600/LLVM/bin/clang++.exe" -o "..\..\..\bin.v2\libs\hello_boost_test\test\hello_boost_system.test\clang-gnu-linux-6.0.0\release\address-model-64\threadapi-win32\h ello_boost_system.exe" -Wl,--start-group "..\..\..\bin.v2\libs\hello_boost_test\test\hello_boost_system.test\clang-gnu-linux-6.0.0\release\address-model-64\threadapi-win32\h ello_boost_system.obj" "..\..\..\bin.v2\libs\system\build\clang-gnu-linux-6.0.0\release\address-model-64\link-static\threadapi-win32\libboost_system-clang6 0-x64-1_66.lib" -Wl,-Bstatic -Wl,-Bdynamic -Wl,--end-group -v -fuse-ld=lld -flto=thin --verbose -m64 --target=i686-pc-windows-msvc -lmsvcrt -m64 clang version 6.0.0 (tags/RELEASE_600/final) Target: x86_64-pc-windows-msvc Thread model: posix InstalledDir: C:\LLVM\clang-600\LLVM\bin "C:\\LLVM\\clang-600\\LLVM\\bin\\lld-link" "-out:..\\..\\..\\bin.v2\\libs\\hello_boost_test\\test\\hello_boost_system.test\\clang-gnu-linux-6.0.0\\release\\address-model-64\\t hreadapi-win32\\hello_boost_system.exe" -defaultlib:libcmt "-libpath:C:\\Program Files (x86)\\Microsoft Visual Studio\\2017\\Professional\\VC\\Tools\\MSVC\\14.13.26128\\lib\\x64" "-libpath:C:\\Program Files (x86)\\Windows Kits\\10\\Lib\\10.0.16299.0\\ucrt\\x64" "-libpath:C:\\Program Files (x86)\\Windows Kits\\10\\Lib\\10.0.16299.0\\um\\x64" -nologo --start-group "..\\..\\..\\bin.v2\\libs\\hello_boost_test\\test\\hello_boost_system.test\\clang-gnu-linux-6.0.0\\release\\address-model-64\\thread api-win32\\hello_boost_system.obj" "..\\..\\..\\bin.v2\\libs\\system\\build\\clang-gnu-linux-6.0.0\\release\\address-model-64\\link-static\\threadapi-win32\\libboost_s ystem-clang60-x64-1_66.lib" -Bstatic -Bdynamic --end-group msvcrt.lib C:\LLVM\clang-600\LLVM\bin\lld-link: warning: ignoring unknown argument: --start-group C:\LLVM\clang-600\LLVM\bin\lld-link: warning: ignoring unknown argument: -Bstatic C:\LLVM\clang-600\LLVM\bin\lld-link: warning: ignoring unknown argument: -Bdynamic C:\LLVM\clang-600\LLVM\bin\lld-link: warning: ignoring unknown argument: --end-group C:\LLVM\clang-600\LLVM\bin\lld-link: error: lto.tmp: undefined symbol: ?system_category@system@boost@@YAAEBVerror_category@12@XZ C:\LLVM\clang-600\LLVM\bin\lld-link: error: lto.tmp: undefined symbol: ?generic_category@system@boost@@YAAEBVerror_category@12@XZ clang++.exe: error: linker command failed with exit code 1 (use -v to see invocation) Which seems to indicate some link problem finding error_category (error_category is found OK with GCC or MSVC)? and for a simple use of Boost.Test library clang version 6.0.0 (tags/RELEASE_600/final) Target: x86_64-pc-windows-msvc Thread model: posix InstalledDir: C:\LLVM\clang-600\LLVM\bin "C:\\LLVM\\clang-600\\LLVM\\bin\\lld-link" "-out:..\\..\\..\\bin.v2\\libs\\hello_boost_test\\test\\hello_boost_test.test\\clang-gnu-linux-6.0.0\\release\\address-model-64\\thr eadapi-win32\\hello_boost_test.exe" -defaultlib:libcmt "-libpath:C:\\Program Files (x86)\\Microsoft Visual Studio\\2017\\Professional\\VC\\Tools\\MSVC\\14.13.26128\\lib\\x64" "-libpath:C:\\Program Files (x86)\\Windows Kits\\10\\Lib\\10.0.16299.0\\ucrt\\x64" "-libpath:C:\\Program Files (x86)\\Windows Kits\\10\\Lib\\10.0.16299.0\\um\\x64" -nologo --start-group "..\\..\\..\\bin.v2\\libs\\hello_boost_test\\test\\hello_boost_test.test\\clang-gnu-linux-6.0.0\\release\\address-model-64\\threadap i-win32\\hello_boost_test.obj" "..\\..\\..\\bin.v2\\libs\\test\\build\\clang-gnu-linux-6.0.0\\release\\address-model-64\\link-static\\threadapi-win32\\libboost_uni t_test_framework-clang60-x64-1_66.lib" "..\\..\\..\\bin.v2\\libs\\timer\\build\\clang-gnu-linux-6.0.0\\release\\address-model-64\\link-static\\threadapi-win32\\libboost_ti mer-clang60-x64-1_66.lib" "..\\..\\..\\bin.v2\\libs\\chrono\\build\\clang-gnu-linux-6.0.0\\release\\address-model-64\\link-static\\threadapi-win32\\libboost_c hrono-clang60-x64-1_66.lib" "..\\..\\..\\bin.v2\\libs\\system\\build\\clang-gnu-linux-6.0.0\\release\\address-model-64\\link-static\\threadapi-win32\\libboost_s ystem-clang60-x64-1_66.lib" -Bstatic -Bdynamic --end-group msvcrt.lib C:\LLVM\clang-600\LLVM\bin\lld-link: warning: ignoring unknown argument: --start-group C:\LLVM\clang-600\LLVM\bin\lld-link: warning: ignoring unknown argument: -Bstatic C:\LLVM\clang-600\LLVM\bin\lld-link: warning: ignoring unknown argument: -Bdynamic C:\LLVM\clang-600\LLVM\bin\lld-link: warning: ignoring unknown argument: --end-group C:\LLVM\clang-600\LLVM\bin\lld-link: error: entry point must be defined clang++.exe: error: linker command failed with exit code 1 (use -v to see invocation) Which leaves me baffled. Verbose logs are attached, and I have several others if any kind soul would be willing to pass a more expert eye over them. Ideas on what I am doing wrong most welcome? Thanks. Paul PS I am away for a while, but eagerly await solutions on my return ;-) --- Paul A. Bristow Prizet Farmhouse Kendal UK LA8 8AB +44 (0) 1539 561830
participants (1)
-
Paul A. Bristow