recompile with -fPIC

故事背景

最近同事遇到一个比较奇怪的问题,直接开门见山吧。在动态库中调用静态库直接报错了recompile with -fPIC,查看cmake的写法也没有问题,而且也是第一次遇见这个问题,所以就开启了我的好奇之路。

探索之路

  1. 说实话我不喜欢百度,因为千篇一律,你抄我的我抄你的,没有任何参考价值,直接google吧,都是一些英文的解析文档,基本上都能解决你遇到的问题。
  2. Briefly, the error means that you can't use a static library to be linked w/ a dynamic one.这句话我就不翻译了。
  3. The solution was to compile everything with -fPIC, and link shared objects with -shared.Add -fPIC to CFLAGS or CXXFLAGS for make-based projects.这句也不翻译了,我觉得还是看英文比较好理解,翻译出来没有那个感觉。

经验心得

In a word

  1. 动态库中不可以链接静态库
  2. 如果想在动态库中链接静态库,需要加上-fPIC重新编译静态库,然后再在动态库中链接就可以了。
  3. 查看是不是添加了-fPIC的命令:readelf -d xxx.so | grep TEXTREL
  4. cmake中直接设置set(CMAKE_CXX_FLAGS "-fPIC")

大家有兴趣的可以自行了解下-fPIC的作用。

原文链接: https://www.cnblogs.com/xupeidong/p/16902520.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍

    recompile with -fPIC

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/5134

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年2月4日 下午7:21
下一篇 2023年2月4日 下午7:22

相关推荐