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

时间:2019-08-30 12:34:28

标签: c++ linux gcc libraries

我目前正在cmake环境中构建共享库(lib1.so)。 lib1.so依赖于外部静态lib libLASlib.a(如有必要,我可以重新编译)。 到目前为止,一切在Windows上都可以运行,但这是切换到linux时的另一个故事:

/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没有问题的原因:

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从静态更改为共享库会得到什么->没有错误

有没有人? 非常感谢!

2 个答案:

答案 0 :(得分:0)

您需要使用lasreader.cpp来编译-fPIC。像这样:

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

答案 1 :(得分:0)

fPIC确实未应用

柯南似乎没有转发fPIC选项

我编辑了CMAKELIST并添加了

set_property(TARGET LASlib PROPERTY POSITION_INDEPENDENT_CODE ON)

最终通过了