c++ - 尽管使用 -fPIC 进行编译,但链接器错误 "relocation R_X86_64_PC32 against undefined symbol"

标签 c++ gcc linker-errors ld fpic

我正在使用命令行编译一个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/

相关文章:

c++ - main.c :(. text+0x30): 对 `reciprocal' 的 undefined reference

GCC 命令从 -Wall 中排除标志?

ios - 集成 iOS 和 Google Plus SDK 时出现链接器错误

c++ - 涉及 boost_lock 的链接器错误

c++ - STL 容器元素销毁顺序

c++ - 互斥量锁定内存的哪一部分? (线程)

c++ - 初始化一个垃圾变量是真正的初始化还是只是一个赋值?

c++ - 告诉 QMake -std=C++17。 QMAKE_CXXFLAGS 被覆盖

c - 为什么即使我包含 math.h header ,我也会收到 "undefined reference to sqrt"错误?

c++ - 具有链式动态分配的删除运算符