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

Astron B boldaster at gmail.com
Wed Dec 25 23:39:09 PST 2013


Hey David,

Thanks a lot for the quick response. I had assumed this mode was already
enabled since while using clang++.exe it said the target is i686-pc-win32
rather than i686-pc-mingw. When calling the clang driver cc1 directly is
"-cxx-abi" "microsoft" the argument that enables this mode? Thanks.


On Thu, Dec 26, 2013 at 2:28 PM, David Majnemer <david.majnemer at gmail.com>wrote:

> 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/20131226/320dec89/attachment.html>


More information about the cfe-dev mailing list