今天,当我尝试用mongodb c++客户端构建我的so lib项目时,我得到了错误:
/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++进行构建。
发布于 2013-12-09 14:15:22
PIC代表与位置无关的代码。引用man gcc:
如果目标机器支持,则发出与位置无关的代码,适用于动态链接,并避免对全局偏移表的大小进行任何限制。
发布于 2013-12-09 14:15:07
您在编译时没有打开可重定位代码就编译了共享库。强烈建议在构建共享库时使用与位置无关的代码(PIC或PIE)。
有关详细信息,请参阅http://en.wikipedia.org/wiki/Position-independent_code。
发布于 2016-01-06 11:02:07
这个系统有一个bug,你不能使用.o或者.a编译的中间文件来生成动态库(xx.so文件),你可以尝试直接使用.cpp或者.c文件来生成动态库,你也可以看到这个链接来修复这个bug (link site)
https://stackoverflow.com/questions/20464234
复制相似问题