编程语言
首页 > 编程语言> > python – R_PPC_REL24重定位超出范围

python – R_PPC_REL24重定位超出范围

作者:互联网

我正在研究嵌入式powerpc(e500v2)平台.我正在使用gcc 4.6.3和eglibc 2.13进行交叉编译.有一个swig库可以在目标上编译和加载.当它在python中加载时,我在回溯中收到此错误:

ImportError: /opt/load/lib/libISSDcn.so: R_PPC_REL24 relocation at 0x0ddc99c0 for symbol `longjmp' out of range

我以前在这个库中遇到过困难,我正在从目标的python 2.5迁移到2.7.当我最初尝试编译这个库时,我在编译时得到重定位错误或操作数超出范围错误,具体取决于我使用的标志.我切换到gcc 4.6.3现在它构建,但我加载时收到此错误.

我试图理解这个错误,但到目前为止,我对它究竟意味着什么以及如何修复它一无所知.我知道某个符号由于某种原因无法找到,但我不明白为什么,或者如何修复它.

解决方法:

R_PPC_REL24重定位用于24位相对偏移.此类型的重定位不应出现在动态重定位表中(这些重定位表用于可加载对象内部的引用,而不是它们之间的引用,因为库可以加载到超过16 MiB的地址).

默认情况下,编译器会尽可能生成这些重定位,因为这比使用完整的32位地址的代码要小得多且速度快,但是对于动态链接,需要将完整地址用于外部可见符号和生成的PIC / GOT条目.

检查-fPIC标志是否用于构建库,并且还通知链接器它正在构建共享对象(通常是通过-shared或-Bshared).

标签:python,c-3,gcc,swig,powerpc
来源: https://codeday.me/bug/20190620/1247479.html