g ++编译错误:制作共享对象时不能使用`.rodata';用-fPIC重新编译 [英] g++ compile error: `.rodata' can not be used when making a shared object; recompile with -fPIC
问题描述
我正在使用命令:
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退出状态
p>
g ++ --std = c ++ 11 -no-pie -Iincludes parser.cpp lib / main-parser.o lib / lib.a
默认情况下,系统中似乎 g ++
会生成与位置无关的可执行文件。其他系统需要 -pie
才能这样做。使用 -no-pie
应该创建一个常规(取决于位置)的可执行文件。
I am using the command:
g++ --std=c++11 -fPIC -Iincludes parser.cpp lib/main-parser.o lib/lib.a
To compile a C++ program on Debian 9. But I am getting the below error message:
/usr/bin/ld: lib/lib.a(csdocument.o): relocation R_X86_64_32 against '.rodata' can not be used when making a shared object; recompile with -fPIC
/usr/bin/ld: final link failed: Nonrepresentable section on output
collect2: error: ld returned 1 exit status
I have already seen the thread: Compilation fails with "relocation R_X86_64_32 against `.rodata.str1.8' can not be used when making a shared object"
However, I have tried adding the -fPIC
argument however it strangely gives the same error message, along with "recompile with -fPIC"
Any ideas would be appreciated. I have tried compiling this on my University's RedHat systems and it works fine there. I'm thinking it could be a missing dependency, but I've been unable to find any answers.
Thanks in advance
As it seems gcc is trying to produce a position-independent executable, tell it not to:
g++ --std=c++11 -no-pie -Iincludes parser.cpp lib/main-parser.o lib/lib.a
It seems that g++
produces position-independent executables by default on your system. Other systems would require -pie
to do so. Using -no-pie
should create a "regular" (position dependent) executable.
这篇关于g ++编译错误:制作共享对象时不能使用`.rodata';用-fPIC重新编译的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!