Edward Diener via llvm-dev
2017-Mar-31 00:57 UTC
[llvm-dev] Invoking lld for PE/COFF (Windows) linking
On 3/30/2017 7:59 PM, Reid Kleckner via llvm-dev wrote:> On Thu, Mar 30, 2017 at 6:08 AM, Edward Diener via llvm-dev > <llvm-dev at lists.llvm.org <mailto:llvm-dev at lists.llvm.org>> wrote: > > Are you saying that once lld is built with mingw-64/gcc on Windows > it is impossible to tell it to handle PE/COFF files when invoking it > from clang++ using the -fuse-ld=lld parameter ? That would indeed be > limiting, considering that on Windows I can build clang either with > mingw-64/gcc or with Visual C++, and the -target parameter allows > clang to generate the appropriate object files. > > > The logic to construct an lld-link command line is part of the MSVC > toolchain in the clang driver, so you can get clang++ to make a coff > file if you tell it you're targetting MSVC like this: > $ clang++ t.cpp -fuse-ld=lld -o t.exe --target=x86_64-windows-msvc > > Of course, that will look for libraries and headers in the wrong places > if you really want to target mingw. If I split it up like this, I get > link errors: > $ clang++ -c t.cpp -o t.o --target=x86_64-windows-gnu > $ clang++ t.o -o t.exe --target=x86_64-windows-msvc -fuse-ld=lldActually just doing: clang++ -c t.cpp -o t.o --target=x86_64-windows-msvc -fmsc-version=1900 clang++ t.o -o t.exe --target=x86_64-windows-msvc -fuse-ld=lld is not working for me. The first invocation works but the second just hangs and never completes. Should it work ? If not, how can I invoke the second to make it work properly ?> C:\src\llvm-project\build_mingw\bin\lld-link.exe: warning: t.o: > undefined symbol: _ZNSt8ios_base4InitC1Ev > C:\src\llvm-project\build_mingw\bin\lld-link.exe: warning: t.o: > undefined symbol: _ZNSt8ios_base4InitD1Ev > C:\src\llvm-project\build_mingw\bin\lld-link.exe: warning: t.o: > undefined symbol: __main > C:\src\llvm-project\build_mingw\bin\lld-link.exe: warning: t.o: > undefined symbol: _ZSt4cout > C:\src\llvm-project\build_mingw\bin\lld-link.exe: warning: t.o: > undefined symbol: _ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc > error: link failed > clang++.exe: error: linker command failed with exit code 1 (use -v to > see invocation) > > If you pile on enough link options, you can probably make it work, but > at that point you're basically reconstructing a link.exe / lld-link.exe > command line. To fix this, someone should add mingw toolchain logic to > clang's driver to support constructing lld-link command lines.
Reid Kleckner via llvm-dev
2017-Mar-31 01:03 UTC
[llvm-dev] Invoking lld for PE/COFF (Windows) linking
On Thu, Mar 30, 2017 at 5:57 PM, Edward Diener via llvm-dev < llvm-dev at lists.llvm.org> wrote:> Actually just doing: > > clang++ -c t.cpp -o t.o --target=x86_64-windows-msvc -fmsc-version=1900 > clang++ t.o -o t.exe --target=x86_64-windows-msvc -fuse-ld=lld > > is not working for me. The first invocation works but the second just > hangs and never completes. Should it work ? If not, how can I invoke the > second to make it work properly ?Is it actually running lld-link.exe? Does lld-link.exe exist next to clang++.exe? If you add -###, what linker command line is clang trying to run? -------------- next part -------------- An HTML attachment was scrubbed... URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20170330/8b6ba1e2/attachment.html>
Edward Diener via llvm-dev
2017-Mar-31 01:24 UTC
[llvm-dev] Invoking lld for PE/COFF (Windows) linking
On 3/30/2017 9:03 PM, Reid Kleckner via llvm-dev wrote:> On Thu, Mar 30, 2017 at 5:57 PM, Edward Diener via llvm-dev > <llvm-dev at lists.llvm.org <mailto:llvm-dev at lists.llvm.org>> wrote: > > Actually just doing: > > clang++ -c t.cpp -o t.o --target=x86_64-windows-msvc -fmsc-version=1900 > clang++ t.o -o t.exe --target=x86_64-windows-msvc -fuse-ld=lld > > is not working for me. The first invocation works but the second > just hangs and never completes. Should it work ? If not, how can I > invoke the second to make it work properly ? > > > Is it actually running lld-link.exe? Does lld-link.exe exist next to > clang++.exe? If you add -###, what linker command line is clang trying > to run?"C:/Programming/VersionControl/bninja_installed_clang/bin/clang++" -o "C:\Programming\VersionControl\modular-boost\build\boost\bin.v2\libs\preprocessor\test\config_info.test\clang-linux-5.0cl\debug\address-model-32\config_info.exe" -Wl,--start-group "C:\Programming\VersionControl\modular-boost\build\boost\bin.v2\libs\preprocessor\test\config_info.test\clang-linux-5.0cl\debug\address-model-32\config_info.obj" -Wl,-Bstatic -Wl,-Bdynamic -Wl,--end-group -g --target=i686-pc-windows-msvc -### -fuse-ld=lld clang version 5.0.0 (trunk 298890) Target: i686-pc-windows-msvc Thread model: posix InstalledDir: C:\Programming\VersionControl\bninja_installed_clang\bin "C:\\Programming\\VersionControl\\bninja_installed_clang\\bin\\lld-link.exe" "-out:C:\\Programming\\VersionControl\\modular-boost\\build\\boost\\bin.v2\\libs\\preprocessor\\test\\config_info.test\\clang-linux-5.0cl\\debug\\address-model-32\\config_info.exe" "-defaultlib:libcmt" "-libpath:C:\\Program Files (x86)\\Microsoft Visual Studio 14.0\\VC\\lib" "-libpath:C:\\Program Files (x86)\\Windows Kits\\10\\Lib\\10.0.14393.0\\ucrt\\x86" "-libpath:C:\\Program Files (x86)\\Windows Kits\\10\\Lib\\10.0.14393.0\\um\\x86" "-nologo" "-debug" "--start-group" "C:\\Programming\\VersionControl\\modular-boost\\build\\boost\\bin.v2\\libs\\preprocessor\\test\\config_info.test\\clang-linux-5.0cl\\debug\\address-model-32\\config_info.obj" "-Bstatic" "-Bdynamic" "--end-group"
Edward Diener via llvm-dev
2017-Mar-31 20:07 UTC
[llvm-dev] Invoking lld for PE/COFF (Windows) linking
On 3/30/2017 9:03 PM, Reid Kleckner via llvm-dev wrote:> On Thu, Mar 30, 2017 at 5:57 PM, Edward Diener via llvm-dev > <llvm-dev at lists.llvm.org <mailto:llvm-dev at lists.llvm.org>> wrote: > > Actually just doing: > > clang++ -c t.cpp -o t.o --target=x86_64-windows-msvc -fmsc-version=1900 > clang++ t.o -o t.exe --target=x86_64-windows-msvc -fuse-ld=lld > > is not working for me. The first invocation works but the second > just hangs and never completes. Should it work ? If not, how can I > invoke the second to make it work properly ? > > > Is it actually running lld-link.exe? Does lld-link.exe exist next to > clang++.exe? If you add -###, what linker command line is clang trying > to run?"C:/Programming/VersionControl/bninja_installed_clang/bin/clang++" -o "C:\Programming\VersionControl\modular-boost\build\boost\bin.v2\libs\preprocessor\test\config_info.test\clang-linux-5.0cl\debug\address-model-32\config_info.exe" -Wl,--start-group "C:\Programming\VersionControl\modular-boost\build\boost\bin.v2\libs\preprocessor\test\config_info.test\clang-linux-5.0cl\debug\address-model-32\config_info.obj" -Wl,-Bstatic -Wl,-Bdynamic -Wl,--end-group -g --target=i686-pc-windows-msvc -### -fuse-ld=lld clang version 5.0.0 (trunk 298890) Target: i686-pc-windows-msvc Thread model: posix InstalledDir: C:\Programming\VersionControl\bninja_installed_clang\bin "C:\\Programming\\VersionControl\\bninja_installed_clang\\bin\\lld-link.exe" "-out:C:\\Programming\\VersionControl\\modular-boost\\build\\boost\\bin.v2\\libs\\preprocessor\\test\\config_info.test\\clang-linux-5.0cl\\debug\\address-model-32\\config_info.exe" "-defaultlib:libcmt" "-libpath:C:\\Program Files (x86)\\Microsoft Visual Studio 14.0\\VC\\lib" "-libpath:C:\\Program Files (x86)\\Windows Kits\\10\\Lib\\10.0.14393.0\\ucrt\\x86" "-libpath:C:\\Program Files (x86)\\Windows Kits\\10\\Lib\\10.0.14393.0\\um\\x86" "-nologo" "-debug" "--start-group" "C:\\Programming\\VersionControl\\modular-boost\\build\\boost\\bin.v2\\libs\\preprocessor\\test\\config_info.test\\clang-linux-5.0cl\\de When I actually try to run the lld-link command as: C:\Programming\VersionControl\bninja_installed_clang\bin\lld-link.exe -out:C:\Programming\VersionControl\modular-boost\build\boost\bin.v2\libs\preprocessor\test\config_info.test\clang-linux-5.0cl\debug\address-model-32\config_info.exe -defaultlib:libcmt "-libpath:C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\lib" "-libpath:C:\Program Files (x86)\Windows Kits\10\Lib\10.0.14393.0\ucrt\x86" "-libpath:C:\Program Files (x86)\Windows Kits\10\Lib\10.0.14393.0\um\x86" -nologo -debug --start-group C:\Programming\VersionControl\modular-boost\build\boost\bin.v2\libs\preprocessor\test\config_info.test\clang-linux-5.0cl\debug\address-model-32\config_info.obj -Bstatic -Bdynamic --end-group I get for output in a Windows command window: C:\Programming\VersionControl\bninja_installed_clang\bin\lld-link.exe: warning: ignoring unknown argument: --start-group C:\Programming\VersionControl\bninja_installed_clang\bin\lld-link.exe: warning: ignoring unknown argument: -Bstatic C:\Programming\VersionControl\bninja_installed_clang\bin\lld-link.exe: warning: ignoring unknown argument: -Bdynamic C:\Programming\VersionControl\bninja_installed_clang\bin\lld-link.exe: warning: ignoring unknown argument: --end-group and then nothing further and lld_link.exe just hangs and never completes. So it looks to me that lld_link, in it effort to link PE/COFF (Windows) files created by clang++ targeting VC++, has some sort of bug.