Ich Kompiliere ein C++ Programm über die BefehlszeileLinkerfehler „Relocation R_X86_64_PC32 gegen undefiniertes Symbol“ trotz Compilation mit -fPIC
g++ -c prog.cc -std=c++11 -march=native -fPIC -fopenmp
und dann versuchen, ein gemeinsames Objekt über
g++ prog.o -shared -fopenmp -o lib/libprog.so
machen
Das hat immer funktioniert. Aber heute habe ich bekommen:
/usr/bin/ld: prog.o: relocation R_X86_64_PC32 against undefined symbol
`_ZTVN12_GLOBAL__N_111handle_baseE' can not be used when making a shared
object; recompile with -fPIC
/usr/bin/ld: final link failed: Bad value
collect2: error: ld returned 1 exit status
Das Symbol _ZTVN12_GLOBAL__N_111handle_baseE
de-Mangeln zu vtable for (anonymous namespace)::handle_base
(handle_base
eine polymorphe Klasse ist in dem anonymen Namespace in prog.cc definiert und ja, ich dynamic_cast<handle_base>()
nennen.)
I verwende gcc Version 4.7.0 (GCC) und GNU ld (GNU Binutils; openSUSE 11.1) 2.19. Kann jemand helfen (schlagen Sie Lösungen vor [anders als ohne gemeinsames Objekt oder die dynamic cast
])?
Sieht aus, als hätten Sie vergessen, * einige * virtuelle Methode * für 'handle_base' zu definieren. –
Müssen Sie nicht ** auch mit -fPIC ** verlinken? –
@ H2CO3 Nein. (Ich habe es trotzdem versucht: macht keinen Unterschied) – Walter