我正在使用 Imakefile 制作 Makefile。 我遇到编译错误。
rm -f /vobs/eagle/build/linux/debug/lib/libTestRtip.so
/usr/bin/g++ -Wl,-soname,libTestRtip.so /vobs/eagle/build/linux/debug/obj/TestRtip.oo - L/vobs/eagle/build/linux/debug/lib -L/vobs- ads/outsource/ace610_linux_64bit/ACE_wrappers/lib/linux -L/vobs- ads/outsource/log4cxx/linux/lib64 -shared -o /vobs/eagle/build/linux/debug/lib/libTestRtip.so
/usr/bin/ld: /vobs/eagle/build/linux/debug/obj/TestRtip.oo: relocation R_X86_64_32 against `.rodata' can not be used when making a shared object; recompile with -fPIC
/vobs/eagle/build/linux/debug/obj/TestRtip.oo: could not read symbols: Bad value
collect2: ld returned 1 exit status
make: *** [/vobs/eagle/build/linux/debug/lib/libTestRtip.so] Error 1
我不知道在 Imakefile 的什么地方添加 -fPIC。
最佳答案
PIC - 位置独立代码。
这是一个标志 (-f
),用于编译器输出带有代码的目标文件,而不管它在内存中的位置。这通常是库 (.so
) 的必备。
因此,正如我所说,它是一个编译器标志,因此您应该查看 CFLAGS
varialbe 的 Makefile 并将其添加到那里。
您的 CFLAGS 可能看起来像:
CFLAGS = -g -O0 -I/usr/local/include
你的工作是:
CFLAGS = -g -O0 -I/usr/local/include -fPIC
或者你可以这样制作:
$ make CFLAGS="-fPIC" all
关于c++ - 在 Imake 文件中添加 -fPIC 选项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22802449/