Sto compilando un programma C++ utilizzando la riga di comandoerrore del linker "delocalizzazione R_X86_64_PC32 contro il simbolo non definito" nonostante la compilazione con -fPIC
g++ -c prog.cc -std=c++11 -march=native -fPIC -fopenmp
e quindi provare a fare un oggetto condiviso tramite
g++ prog.o -shared -fopenmp -o lib/libprog.so
Questo ha sempre funzionato. Ma oggi ottengo:
/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
Il simbolo _ZTVN12_GLOBAL__N_111handle_baseE
de-Mangani a vtable for (anonymous namespace)::handle_base
(handle_base
è una classe polimorfica definita nel namespace anonimo prog.cc e sì mi chiamo dynamic_cast<handle_base>()
.)
I sto usando gcc versione 4.7.0 (GCC) e GNU ld (GNU Binutils; openSUSE 11.1) 2.19. Qualcuno può aiutare (suggerire soluzioni [a parte fare senza l'oggetto condiviso o lo dynamic cast
])?
Sembra che tu abbia dimenticato di * definire * qualche * metodo virtuale * per 'handle_base'. –
Non devi ** link ** con -fPIC? –
@ H2CO3 No. (Ho provato comunque: non fa differenza) – Walter