此项目中存在两个链接错误。
@Steve指出的第一个是缺乏 void * __ gxx_personality_v0;
如果有人能解释为什么用cygwin下的clang ++ 3.5编译的C ++项目会创建一个对此的引用,我想了解。无论如何,我将符号定义为一种解决方法。
另一个问题似乎是对64位的32位相对寻址的引用。我正在寻找一种方法来告诉clang ++编译32位或64位。我也会尝试原生linux,但是,如果有人能解释为什么会这样,我想了解。
我认为它可能是一个静态变量,位于地址空间的低位,被堆栈中的某些东西访问,但同样,clang正在生成所有内容,所以就我所知,这是一个错误。编译器。
clang++ -std=c++11 -O2 -g -I include/ -pthread -c RequestHandler.cc
clang++ -std=c++11 -O2 -g Config.o Logger.o RequestHandler.o FileSys.\
o Buffer.o server.o CspServlet.o -pthread -o server
RequestHandler.o:fake:(.debug_info+0x54bd): relocation truncated to f\
it: R_X86_64_32 against `.debug_ranges'
...
FileSys.o:fake:(.eh_frame$_ZNSt10_HashtableISsSt4pairIKSsP2FLESaIS4_E\
NSt8__detail10_Select1stESt8equal_toISsESt4hashISsENS6_18_Mod_range_h\
ashingENS6_20_Default_ranged_hashENS6_20_Prime_rehash_policyENS6_17_H\
ashtable_traitsILb1ELb0ELb1EEEE21_M_insert_unique_nodeEmmPNS6_10_Hash\
_nodeIS4_Lb1EEE+0x13): undefined reference to `__gxx_personality_v0'
FileSys.o:fake:(.eh_frame$_ZNSt8__detail16_Hashtable_allocISaINS_10_H\
ash_nodeISt4pairIKSsP2FLELb1EEEEE16_M_allocate_nodeIJRKS6_EEEPS7_DpOT\
_+0x13): more undefined references to `__gxx_personality_v0' follow
collect2: error: ld returned 1 exit status
答案 0 :(得分:0)
好的,事实证明,在cygwin上,当我安装clang时,它并没有完全使用clang工具链。 clang正在编译,但g ++正在链接(我认为)。请记住,所有这些工具都可以别名,但它非常可疑。
我是在Unix上构建的,但它确实有用。相同的makefile。 所以问题是,当我写clang时,它并没有使用clang来链接。这很奇怪。