gpt4 book ai didi

c++ - 尽管使用了 fpic,但出现错误 "can not be used when making a shared object; recompile with -fPIC"

转载 作者:太空宇宙 更新时间:2023-11-04 11:46:04 26 4
gpt4 key购买 nike

我目前正在 cmake 环境中构建共享库 (lib1.so)。lib1.so 依赖于外部静态库 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 从静态库更改为共享库会带来什么 -> 没有错误

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

最佳答案

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

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

关于c++ - 尽管使用了 fpic,但出现错误 "can not be used when making a shared object; recompile with -fPIC",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57726864/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com