我目前正在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从静态更改为共享库会得到什么->没有错误
有没有人? 非常感谢!
答案 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)
最终通过了