[llvm-dev] Invoking lld for PE/COFF (Windows) linking

Reid Kleckner via llvm-dev
Wed, 29 Mar 2017 17:38:37 -0000

If clang is targeting VC++, then -fuse-ld=lld should be enough to make it
run lld-link.exe, and you won't need to set the flavor or do anything
special to get PE/COFF files.

This example worked for me:

$ cat t.cpp
#include <iostream>
int main() { std::cout << "hello world\n"; }

$ clang++ t.cpp -fuse-ld=lld -o t.exe && ./t.exe
hello world

Unfortunately, we don't have a GNU-ld compatible command line interface for
the COFF port of LLD, if that's what you're having trouble with. This is
something I personally think we should add, but don't have time to pursue.

On Wed, Mar 29, 2017 at 7:56 AM, Edward Diener via llvm-dev <
llvm-dev at lists.llvm.org> wrote:

> I build llvm/clang/lld from source on Windows using mingw-64/gcc-6.3. I
> use clang++ both to test clang targeting gcc and clang targeting VC++. When
> using clang targeting VC++ I use the appropriate target triple when
> compiling and am trying to use lld to link the object file(s) into an exe.
> To do that I use the clang option "-fuse-ld=lld" when linking.
According to
> the llvm doc on using lld with PE/COFF on Windows at
> https://lld.llvm.org/windows_support.html:
>
> "LLD supports Windows operating system. When invoked as lld-link.exe
or
> with -flavor link, the driver for Windows operating system is used to parse
> command line options, and it drives further linking processes. LLD accepts
> almost all command line options that the linker shipped with Microsoft
> Visual C++ (link.exe) supports."
>
> Unfortunately with clang++ attempting to use "-fuse-ld=lld-link"
when
> linking outputs:
>
> "clang++.exe: error: unsupported value 'lld_link' for -linker
option"
>
> So I must use "-fuse-ld=lld". Does this mean that I should be
passing
> "-flavor link" to the lld linker ? If so, how do I do that ? If
not, what
> do I do to have lld work with PE/COFF linking rather than ELF linking ?
>
> I have attempted to pass to the clang++ when linking:
>
> 1) "-flavor link", which outputs:
> clang++.exe: error: unknown argument: '-flavor'
> clang++.exe: error: no such file or directory: 'link'
>
> 2) -flavor=link", which outputs:
> clang++.exe: error: unknown argument: '-flavor=link'
>
> 3) -Wl,-flavor,link, which outputs
> C:\Programming\VersionControl\bninja_installed_clang\bin\lld: error:
> unknown argument: -flavor
>
> 4) -Wl,-flavor=link, which outputs
> C:\Programming\VersionControl\bninja_installed_clang\bin\lld: error:
> unknown argument: -flavor=link
>
> What is the "magic" invocation that will allow me to invoke the
lld linker
> from the clang++ command, but get the linker to work in PE/COFF mode rather
> than in ELF mode, so it will link object files created by clang targeting
> VC++ ?
>
> _______________________________________________
> LLVM Developers mailing list
> llvm-dev at lists.llvm.org
> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL:
<http://lists.llvm.org/pipermail/llvm-dev/attachments/20170329/1cbdd1b9/attachment.html>