在Imake文件中添加-fPIC选项

时间:2014-04-02 05:40:49

标签: c++ linux linker

我正在使用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的位置。

1 个答案:

答案 0 :(得分:0)

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