首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >尽管使用了fpic,但出现错误“在创建共享对象时无法使用;使用-fPIC重新编译”

尽管使用了fpic,但出现错误“在创建共享对象时无法使用;使用-fPIC重新编译”
EN

Stack Overflow用户
提问于 2019-08-30 20:34:29
回答 2查看 685关注 0票数 0

我目前正在cmake环境之外构建一个共享库(lib1.so)。lib1.so依赖于外部静态lib libLASlib.a (如果需要,我可以重新编译它)。到目前为止,一切都能在windows上运行,但当切换到linux时就是另一回事了:

代码语言:javascript
运行
复制
/usr/bin/ld: lib/LASlib/libLASlib.a(lasreader.cpp.o): relocation R_X86_64_PC32 against symbol `_ZN9LASreader35read_point_filtered_and_transformedEv' can not be used when making a shared object; recompile with -fPIC
/usr/bin/ld: final link failed: Bad value

所以我尝试用-fPIC ->重新编译libLASlib,同样的错误

由于我的环境原因,我无法验证fpic是否有效地添加到了gcc命令行中。

以下是我试图确认的,fPIC没有问题:

代码语言:javascript
运行
复制
readelf --dynamic libLASlib.a | grep lasreader.cpp.o -A2
File: libLASlib.a(lasreader.cpp.o)

There is no dynamic section in this file.

对于该记录,没有找到一个带有动态部分的cpp.o

我试着看看如果我把liblas从静态库改为共享库会有什么效果->没有错误

有什么想法吗?非常感谢!

EN

回答 2

Stack Overflow用户

发布于 2019-08-30 20:59:00

您需要使用-fPIC编译lasreader.cpp。如下所示:

g++ -c -fPIC -o lasreader.cpp.o lasreader.cpp

票数 0
EN

Stack Overflow用户

发布于 2019-08-30 23:24:59

fPIC确实没有被应用

柯南似乎没有转发fPIC选项

我编辑了CMAKELIST并添加了

代码语言:javascript
运行
复制
set_property(TARGET LASlib PROPERTY POSITION_INDEPENDENT_CODE ON)

最终它通过了

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

https://stackoverflow.com/questions/57726864

复制
相关文章

相似问题

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