[cfe-dev] New operator and some others don't have matching symbol names between clang and visual studio?

David Majnemer david.majnemer at gmail.com
Wed Dec 25 22:28:56 PST 2013


clang++.exe defaults to the mingw ABI.  It seems you want to use
clang-cl.exe, it uses the MSVC ABI.  Note that clang-cl.exe's argument
parsing is compatible with MSVC's cl.exe while clang++.exe is compatible
with gcc.


On Wed, Dec 25, 2013 at 10:03 PM, Astron B <boldaster at gmail.com> wrote:

> Hey,
>
> I have an issue while trying to link some clang compiled code. When I
> compile my test dll with clang I get a new operator like this:
>
> __Znwj
>
> I guess this is conformant with GCC's naming.
>
> But when compiling with visual studio the new operator is:
>
> Searching libraries
>     Searching C:\Program Files (x86)\Microsoft Visual Studio
> 11.0\VC\LIB\MSVCRTD.lib:
>       Found __purecall
>         Referenced in ConsoleApplication2.obj
>         Loaded MSVCRTD.lib(MSVCR110D.dll)
>       Found "void * __cdecl operator new(unsigned int)" (??2 at YAPAXI@Z)
>         Referenced in ConsoleApplication2.obj
>         Loaded MSVCRTD.lib(MSVCR110D.dll)
>       Found "void __cdecl operator delete(void *)" (??3 at YAXPAX@Z)
>         Referenced in ConsoleApplication2.obj
>         Loaded MSVCRTD.lib(MSVCR110D.dll)
>
> I also noticed that with Clang I get a symbol for pure call catches called:
> ___cxa_pure_virtual
>
> I assume the __purecall above is the visual studio version.
>
> When I try to link the clang compiled object file using link.exe I get
> unresolved symbol errors because of this.
>
> F:\LLVM-fresh\vs11\bin\Debug>clang++ -c testdll.cpp -o testdll.o -v
> clang version 3.5 (trunk)
> Target: i686-pc-win32
> Thread model: posix
>  "F:\LLVM-fresh\vs11\bin\Debug\clang++.exe" -cc1 -triple i686-pc-win32
> -emit-obj
>  -mrelax-all -disable-free -main-file-name testdll.cpp -mrelocation-model
> static
>  -mdisable-fp-elim -fmath-errno -masm-verbose -mconstructor-aliases
> -target-cpu
> pentium4 -v -coverage-file "F:\\LLVM-fresh\\vs11\\bin\\Debug\\testdll.o"
> -resour
> ce-dir "F:\\LLVM-fresh\\vs11\\bin\\Debug\\..\\lib\\clang\\3.5"
> -internal-isystem
>  "F:\\LLVM-fresh\\vs11\\bin\\Debug\\..\\lib\\clang\\3.5\\include"
> -internal-isys
> tem "C:\\Program Files (x86)\\Microsoft Visual Studio 10.0\\VC\\INCLUDE"
> -intern
> al-isystem "C:\\Program Files (x86)\\Microsoft Visual Studio
> 10.0\\VC\\ATLMFC\\I
> NCLUDE" -internal-isystem "C:\\Program Files (x86)\\Microsoft
> SDKs\\Windows\\v7.
> 0A\\include" -std=c++11 -fdeprecated-macro -fdebug-compilation-dir
> "F:\\LLVM-fre
> sh\\vs11\\bin\\Debug" -ferror-limit 19 -fmessage-length 80 -mstackrealign
> -fms-e
> xtensions -fms-compatibility -fmsc-version=1700 -fdelayed-template-parsing
> -fobj
> c-runtime=gcc -fcxx-exceptions -fexceptions -fdiagnostics-show-option
> -fcolor-di
> agnostics -vectorize-slp -o testdll.o -x c++ testdll.cpp
> clang -cc1 version 3.5 based upon LLVM 3.5svn default target i686-pc-win32
> #include "..." search starts here:
> #include <...> search starts here:
>  F:\LLVM-fresh\vs11\bin\Debug\..\lib\clang\3.5\include
>  C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\INCLUDE
>  C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\ATLMFC\INCLUDE
>  C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include
> End of search list.
>
> F:\LLVM-fresh\vs11\bin\Debug>nm testdll.o
> 00000000 t .text
> 00000000 t .text
> 00000001 a @feat.00
> 00000000 T __ZN7testOneC2Ev
>          U __Znwj
> 00000000 T _whatever
>
> F:\LLVM-fresh\vs11\bin\Debug>
>
>
> C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\bin>link /DLL
> /NOENTRY te
> stdll.o /VERBOSE
> Microsoft (R) Incremental Linker Version 11.00.50727.1
> Copyright (C) Microsoft Corporation.  All rights reserved.
>
>
> Starting pass 1
>
> Searching libraries
>
> Finished searching libraries
>
> Finished pass 1
>
> testdll.o : error LNK2019: unresolved external symbol __Znwj referenced in
> funct
> ion _whatever
> testdll.dll : fatal error LNK1120: 1 unresolved externals
>
>
>
> How can I get this to link? Thanks.
>
> _______________________________________________
> cfe-dev mailing list
> cfe-dev at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-dev
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-dev/attachments/20131225/20ea2d29/attachment.html>


More information about the cfe-dev mailing list