【问题标题】:Adding -fPIC option in Imake file在 Imake 文件中添加 -fPIC 选项
【发布时间】:2014-04-02 05:40:49
【问题描述】:

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

【问题讨论】:

  • 请发布编译的全部输出

标签: c++ linux linker


【解决方案1】:

PIC - 位置无关代码。 这是一个标志 (-f),用于编译器输出带有代码的目标文件,而与它在内存中的位置无关。这通常是图书馆的必备 (.so)。

所以,正如我所说,它是一个编译器标志,所以您应该查看您的 Makefile 中的CFLAGS varialbe 并将其添加到那里。

您的 CFLAGS 可能如下所示:

CFLAGS = -g -O0 -I/usr/local/include

而你的工作是:

CFLAGS = -g -O0 -I/usr/local/include -fPIC

或者你可以这样:

$ make CFLAGS="-fPIC" all

【讨论】:

  • 我正在使用Imakefile来创建Makefile
  • @user3153014,所以阅读文档,看看你可以在哪里设置编译器标志,我想你已经明白了......
猜你喜欢
  • 1970-01-01
  • 2011-07-15
  • 2021-07-27
  • 2016-11-12
  • 2020-08-10
  • 2013-12-26
  • 1970-01-01
  • 2017-11-29
  • 2014-06-07
相关资源
最近更新 更多