我目前正在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从静态库改为共享库会有什么效果->没有错误
有什么想法吗?非常感谢!
发布于 2019-08-30 12:59:00
您需要使用-fPIC
编译lasreader.cpp
。如下所示:
g++ -c -fPIC -o lasreader.cpp.o lasreader.cpp
发布于 2019-08-30 15:24:59
fPIC确实没有被应用
柯南似乎没有转发fPIC选项
我编辑了CMAKELIST并添加了
set_property(TARGET LASlib PROPERTY POSITION_INDEPENDENT_CODE ON)
最终它通过了
https://stackoverflow.com/questions/57726864
复制相似问题