2015-03-30 4 views
0

В этом проекте есть две ошибки ссылок.Поиск искаженной ошибки 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 
+0

У этого вопроса есть возможное обходное решение: http://stackoverflow.com/questions/329059/what-is-gxx-personality-v0-for, по крайней мере, для 'неопределенных ссылок на часть __gxx_personality_v0', которая определяет' void * __ gxx_personality_v0; 'где-то – Steve

+0

Хорошо, я добавил определение __gxx_personality_v0, но, учитывая, что я компилирую и связываю с clang, я не понимаю причину. Он должен быть связан с libC++. – Dov

+0

Хорошо, я не уверен. Я просто сделал поиск Google для ошибки. Возможно, что-то еще в вашем проекте имеет определенную зависимость от GCC, о которой вы не знаете. Steve

ответ

0

Хорошо, получается, что на Cygwin, когда я установил лязг, он не полностью использовать лязг набор инструментов. clang компилируется, но g ++ связывает (я думаю). Имейте в виду, что все эти инструменты могут быть сглажены к чему-то другому, но это очень подозрительно.

Я построил на Unix и работал. Тот же make-файл. Так что проблема в том, что когда я писал clang, он не использовал clang для ссылки. И это странно.

Смежные вопросы