gpt4 book ai didi

c++ - g++ 编译错误 : `.rodata' can not be used when making a shared object; recompile with -fPIC

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

我正在使用命令:
g++ --std=c++11 -fPIC -Iincludes parser.cpp lib/main-parser.o lib/lib.a

在 Debian 9 上编译 C++ 程序。但我收到以下错误消息:
/usr/bin/ld: lib/lib.a(csdocument.o): 创建共享对象时不能使用针对“.rodata”的重定位 R_X86_64_32;使用 -fPIC 重新编译
/usr/bin/ld:最终链接失败:输出中不可表示的部分
collect2:错误:ld 返回 1 退出状态

我已经看到了线程: Compilation fails with "relocation R_X86_64_32 against `.rodata.str1.8' can not be used when making a shared object"

但是,我尝试添加 -fPIC 参数,但奇怪的是它给出了相同的错误消息,以及“使用 -fPIC 重新编译”

如有任何想法,我们将不胜感激。我已经尝试在我大学的 RedHat 系统上编译它并且在那里工作正常。我认为这可能是缺少依赖项,但我一直找不到任何答案。

提前致谢

最佳答案

因为看起来 gcc 正试图生成一个与位置无关的可执行文件(“共享对象”是提示),告诉它不要:

g++ --std=c++11 -no-pie -Iincludes parser.cpp lib/main-parser.o lib/lib.a

似乎 g++ 在您的系统上默认生成与位置无关的可执行文件。其他系统需要 -pie 才能这样做。使用 -no-pie 应该创建一个“常规”(位置相关)可执行文件。

(该错误是由于试图将编译为非位置无关的目标文件链接到应该是位置无关的可执行文件的结果)。

关于c++ - g++ 编译错误 : `.rodata' can not be used when making a shared object; recompile with -fPIC,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47459120/

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