首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >尽管使用-fPIC进行编译,但链接器错误"relocation R_X86_64_PC32 against symbol“

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

Stack Overflow用户
提问于 2013-02-09 02:44:22
回答 2查看 12.3K关注 0票数 5

我正在使用命令行编译一个c++程序

代码语言:javascript
复制
g++ -c prog.cc -std=c++11 -march=native -fPIC -fopenmp

然后尝试通过以下方式创建共享对象

代码语言:javascript
复制
g++ prog.o -shared -fopenmp -o lib/libprog.so

这一直是有效的。但今天我得到了:

代码语言:javascript
复制
/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)?

EN

回答 2

Stack Overflow用户

发布于 2014-06-09 09:22:17

我刚刚在升级到ubuntu 14.04的时候遇到了类似的情况。我必须在定义'missing‘符号的源文件中添加-fkeep-inline-function。不知道您的问题是否类似。

票数 1
EN

Stack Overflow用户

发布于 2014-08-28 14:02:42

您只需要为您的基类(Handle_base)隐藏默认可见性。你可以这样做-

代码语言:javascript
复制
#define VISIBILITY __attribute__((visibility("hidden")))
class VISIBILITY handle_base; 
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14779260

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档