c++ - 在 Imake 文件中添加 -fPIC 选项

标签 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。

最佳答案

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/

相关文章:

c - set follow-fork mode child后如何在子进程中设置断点?

c++ - 将参数传递给模板

c++ - 为什么 C++ 字符串迭代器不检查错误?

php - 如何同时运行多个 Laravel 命令?

c++ - 如何让库与 Linux 打包一起工作?

c - 有什么方法可以更改链接以避免 HPUX 上的 LD_PRELOAD?

c - 链接器找不到对作为参数传递给 gcc 的 .a 库的引用

c++ - 从 VS2012 项目链接使用 VS2008 构建的静态库?它们兼容吗?

c++ - 运算符 [] 的重载

c++ - MITM 代理,TLS 1.2 证书验证失败