首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >什么是-fPIC编译选项?

什么是-fPIC编译选项?
EN

Stack Overflow用户
提问于 2013-12-09 14:10:34
回答 3查看 6.4K关注 0票数 0

今天,当我尝试用mongodb c++客户端构建我的so lib项目时,我得到了错误:

代码语言:javascript
复制
/usr/bin/ld: /usr/lib/gcc/x86_64-linux-gnu/4.8/../../../libmongoclient.a(connection_factory.o): relocation R_X86_64_32S against `_ZTVN5mongo17AScopedConnectionE' can not be used when making a shared object; recompile with -fPIC
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../libmongoclient.a: error adding symbols: Bad value
clang: error: linker command failed with exit code 1 (use -v to see invocation)

我在谷歌上搜索了-fPIC,但什么也没找到。我在哪里可以找到关于这个的医生?这是什么?我正在使用clang++进行构建。

EN

回答 3

Stack Overflow用户

发布于 2013-12-09 14:15:22

PIC代表与位置无关的代码。引用man gcc:

如果目标机器支持,则发出与位置无关的代码,适用于动态链接,并避免对全局偏移表的大小进行任何限制。

票数 7
EN

Stack Overflow用户

发布于 2013-12-09 14:15:07

您在编译时没有打开可重定位代码就编译了共享库。强烈建议在构建共享库时使用与位置无关的代码(PIC或PIE)。

有关详细信息,请参阅http://en.wikipedia.org/wiki/Position-independent_code

票数 3
EN

Stack Overflow用户

发布于 2016-01-06 11:02:07

这个系统有一个bug,你不能使用.o或者.a编译的中间文件来生成动态库(xx.so文件),你可以尝试直接使用.cpp或者.c文件来生成动态库,你也可以看到这个链接来修复这个bug (link site)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20464234

复制
相关文章

相似问题

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