[工程构建] relocation R_X86_64_32 against `.rodata‘ can not be used when making a shared object;

参考:

学习笔记:relocation R_X86_64_32 against `.rodata‘ can not be used when making a shared object;_fanchenxinok的专栏-CSDN博客

描述:

在构建工程时会遇到

 relocation R_X86_64_32 against `.rodata‘ can not be used when making a shared object;

如果某个动态库依赖于其它静态库,则要求静态库在编译时指定 -fPIC 编译选项,如果是使用 configure 来配置工程,则可以在 configure 时携带 -with-pic 开启 -fPIC,这样就不需要修改MakeFile了。

比如 c-ares 、exosip、osip2、osipparser2 这4个都是静态库,而我们需要创建一个新的动态库,这个动态库会用到上述4个静态库,那么如果在编译上述4个静态库时没指定 -fPIC 编译选项,则会出现上面的报错。

解决方法是在 configure 上述4个静态库的时候都携带 -with-pic 即可:

  ./configure -with-pic

ps:

上述问题不会出现在Windows中,仅在Linux中需要注意

Guess you like

Origin blog.csdn.net/ykun089/article/details/120570516