gpt4 book ai didi

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

转载 作者:IT老高 更新时间:2023-10-28 23:11:30 27 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): 重定位 R_X86_64_32 反对 '.rodata' 制作共享对象时不能使用;使用 -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/46827433/

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