linker error “réinstallation R_X86_64_PC32 contre undefined symbol” en dépit de la compilation avec -fPIC

Je suis à la compilation d'un programme c++ en utilisant la ligne de commande

g++ -c prog.cc -std=c++11 -march=native -fPIC -fopenmp

et puis essayer de faire un objet partagé via

g++ prog.o -shared -fopenmp -o lib/libprog.so

Ce qui a toujours travaillé. Mais aujourd'hui, je reçois:

/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

Le symbole _ZTVN12_GLOBAL__N_111handle_baseE de-mangles à
vtable for (anonymous namespace)::handle_base
(handle_base est un polymorphe classe définie dans l'espace de noms anonymes en prog.cc et oui, je fais appel dynamic_cast<handle_base>().)

Je suis en utilisant gcc version 4.7.0 (GCC) et GNU ld (GNU Binutils; openSUSE 11.1) 2.19. Quelqu'un peut-il aider (proposer des solutions autres que de le faire sans objet partagé ou le dynamic cast])?

On dirait que vous avez oublié de définir méthode virtuelle pour handle_base.
Vous n'avez pas de lien avec -fPIC?
Pas de. (J'ai essayé de toute façon: fait aucune différence).
Si la méthode est virtuelle pure, alors vous n'avez pas défini. handle_base seulement comme une méthode virtuelle pure. Faire que seulement virtuelle, et de donner un corps de la fonction ne doit pas aider.
N' "g++ -partagé prog.cc -std=c++11 -march=native -fPIC-fopenmp -o lib/libprog.donc," ont le même problème?

OriginalL'auteur Walter | 2013-02-08