[LLVMdev] Windows question: Dozens of linker warnings and errors

Michael Spencer bigcheesegs at gmail.com
Wed May 23 17:19:21 PDT 2012


On Wed, May 23, 2012 at 4:38 PM, Mikael Lyngvig <mikael at lyngvig.org> wrote:
> Hi again again,
>
> I'm trying to build my compiler frontend in C++ on Windows 7 x64 using
> clang++.exe.  I want to use clang++ for my project so that I get a feel for
> how mature and usable the Windows support is as I gradually get up to speed
> with LLVM for Windows.  I could develop on Linux, but I need the Windows
> support so I figure I might as well do it the hard way.
>
> My code is fairly simple C++ with a few template classes, a rare virtual
> function, and nothing very fancy.  I am able to compile my code without
> warnings (although clang++ earlier on found a couple of very serious issues
> in my code).  But when I get to the link phase, all hell breaks loose:
>
> I get a ton of these warnings:
>
> Memory.o : warning LNK4006: _InterlockedBitTestAndSet already defined in
> Stream.o; second definition ignored
> Memory.o : warning LNK4006: _InterlockedBitTestAndReset already defined in
> Stream.o; second definition ignored
> Memory.o : warning LNK4006: _InterlockedBitTestAndComplement already defined
> in Stream.o; second definition ignored
> Memory.o : warning LNK4006: _MemoryBarrier already defined in Stream.o;
> second definition ignored
> Memory.o : warning LNK4006: _ReadPMC already defined in Stream.o; second
> definition ignored
>
> I don't use InterlockedBitTestAndSet anywhere in my code and the same goes
> for the rest of the symbols that are being warned about.
>
> After that, I get a ton of errors form the linker because it complains about
> the above symbols already being defined.

This is due to clang not understanding force_inline. These functions
are defined in a header included from Windows.h, so it ends up getting
a definition everywhere it is included.

> I also get a few errors like this:
>
> Bitset_test-423377.o : error LNK2001: unresolved external symbol
> __ZTVN10__cxxabiv120__si_class_type_infoE
>
> Any ideas?  Is the Windows support simply not mature enought for real use or
> am I doing something wrong?  I invoke the linker through clang++ by giving
> the input object files and a library that must be linked against, made with
> Microsoft's LIB tool.  I use Microsoft LIB because LINK rejects libraries
> created using llvm-ar.
>
> I only use the -c, -o, -v, and -D options to clang++.exe and nothing else.
>  Nothing advanced yet.
>
> Is it that clang++/Windows simply don't support the use of libraries yet?
>  The hello world example works great, but I do aspire to more than that.
>
> If I have missed an important note in the documentation, then I apologize
> greatly in advance.
>
>
> Sincerely,
> Mikael Lyngvig

The rest of the issues are due to clang not supporting the Microsoft
C++ ABI yet. To use clang on Windows for C++ code you will need to use
it with MinGW as it provides libraries that use the GNU C++ ABI.

- Michael Spencer




More information about the llvm-dev mailing list