我正在使用命令行编译一个 c++ 程序
g++ -c prog.cc -std=c++11 -march=native -fPIC -fopenmp
然后尝试通过
g++ prog.o -shared -fopenmp -o lib/libprog.so
这一直有效。但今天我得到:
/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
符号_ZTVN12_GLOBAL__N_111handle_baseE
de-mangles 为
vtable for (anonymous namespace)::handle_base
(handle_base
是在 prog.cc 的匿名命名空间中定义的多态类,是的,我确实调用了dynamic_cast<handle_base>()
。)
我正在使用 gcc 版本 4.7.0 (GCC) 和 GNU ld (GNU Binutils; openSUSE 11.1) 2.19。任何人都可以提供帮助(建议解决方案[除了没有共享对象或dynamic cast
])吗?