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