Mam kompilacji program w C++ przy użyciu wiersza poleceniabłąd łącznik „relokacja R_X86_64_PC32 przed nieokreślonym symbolem” pomimo kompilacji z -fPIC
g++ -c prog.cc -std=c++11 -march=native -fPIC -fopenmp
a następnie starać się obiekt udostępniony poprzez
g++ prog.o -shared -fopenmp -o lib/libprog.so
To zawsze działało. Ale dziś mam:
/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
symbol _ZTVN12_GLOBAL__N_111handle_baseE
de-Mangles do vtable for (anonymous namespace)::handle_base
(handle_base
jest klasą polimorficzny zdefiniowane w anonimowej przestrzeni nazw w prog.cc i tak nie nazywają dynamic_cast<handle_base>()
.)
I "Używam gcc w wersji 4.7.0 (GCC) i GNU ld (GNU Binutils; openSUSE 11.1) 2.19. Czy ktokolwiek może pomóc (sugerować rozwiązania [inne niż robienie bez wspólnego obiektu lub dynamic cast
])?
Wygląda na to, że zapomniałeś * zdefiniować * jakąś * metodę wirtualną * dla 'handle_base'. –
Czy nie musisz ** link ** również z -fPIC? –
@ H2CO3 Nie (próbowałem w każdym razie: nie robi różnicy) – Walter