В этом проекте есть две ошибки ссылок.Поиск искаженной ошибки C++ link
Первым, указанным @Steve, является отсутствие void * __ gxx_personality_v0;
Если кто-нибудь может объяснить, почему проект C++, скомпилированный с clang ++ 3.5 под cygwin, создаст ссылку на это, я хотел бы это понять. Во всяком случае, я определил символ как обходной путь.
Другая проблема, похоже, относится к 32-разрядной относительной адресации в 64-разрядной версии. Я ищу способ сказать 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
У этого вопроса есть возможное обходное решение: http://stackoverflow.com/questions/329059/what-is-gxx-personality-v0-for, по крайней мере, для 'неопределенных ссылок на часть __gxx_personality_v0', которая определяет' void * __ gxx_personality_v0; 'где-то – Steve
Хорошо, я добавил определение __gxx_personality_v0, но, учитывая, что я компилирую и связываю с clang, я не понимаю причину. Он должен быть связан с libC++. – Dov
Хорошо, я не уверен. Я просто сделал поиск Google для ошибки. Возможно, что-то еще в вашем проекте имеет определенную зависимость от GCC, о которой вы не знаете. –
Steve