动态链接警告:creating a DT_TEXTREL in object

来源:互联网 发布:通用顶级域名有多少个 编辑:程序博客网 时间:2024/06/05 19:32

前一段时间将一个模块做成动态库的过程中,编译.so的时候有一个警告:creating a DT_TEXTREL in object。

但是明明makefile里面是有加fPIC的,不知为何还会生成DT_TEXTREL。

导致设备启动的时候加载.so文件的时候,弹出了“Can't modify /lib/libispfront.so's text section. Use GCC option -fPIC for shared objects, please.”

对着makefile瞅了半天,也没发现哪里有问题。

问题实际上出在这个.so文件所链接的一个静态库上,这个静态库编译的时候是没加fPIC的,所以生成的代码不是地址无关的,

导致的最终结果是生成的.so中一半地址无关代码,一半地址相关需要重定位的。

正常来说这种.so应该也是能正常加载的,但是不知为何,可能链接器做了什么我不了解的限制,只加载fPIC的.so,

或者是链接器链接的时候有什么选项没有选对?

但是,可悲的是这个静态库的源代码随着部门划分划走了,所以拿不到源代码,也就无法重新编译。

最终想了另外一个办法饶了过去,将这个静态库从.so中拎了出来,放在可执行程序中,然后就只把能编译的代码编成.so。

问题暂时是绕过去了,但是这个降低耦合的目的没有达到,起码是事倍功半。。。

0 0
原创粉丝点击