我正在使用命令行编译一个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
分解为
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
])吗?
最佳答案
我在升级到 ubuntu 14.04 时遇到了类似的问题。我必须将 -fkeep-inline-functions 添加到定义“缺失”符号的源文件中。不知道您的问题是否类似。
关于c++ - 尽管使用 -fPIC 进行编译,但链接器错误 "relocation R_X86_64_PC32 against undefined symbol",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14779260/