在Python-2.7.13和Python-3.5.7构建期间,libpython*.so文件中未定义对major、minor和makedev的引用

8hhllhi2  于 2023-11-20  发布在  Python
关注(0)|答案(1)|浏览(137)

我使用以下配置命令行选项从头开始交叉编译python-2.7.13python-3.5.7./configure二进制文件:

CONFIG_SITE=config.site ./configure \
    --host=arm-linux-gnueabi \
    --build=x86_64-pc-linux-gnu \
    CC=/toolchain/gcc-arm-8.2-2018.08-x86_64-arm-linux-gnueabi/bin/arm-linux-gnueabi-gcc \
    RANLIB=/toolchain/gcc-arm-8.2-2018.08-x86_64-arm-linux-gnueabi/bin/arm-linux-gnueabi-ranlib \
    READELF=/toolchain/gcc-arm-8.2-2018.08-x86_64-arm-linux-gnueabi/bin/arm-linux-gnueabi-readelf \
    --enable-shared --enable-ipv6 --without-cxx-main --without-doc-strings --with-system-ffi --with-pydebug

字符串
在配置成功并生成所需的Makefile之后,当我执行make以生成python二进制文件时,我得到以下错误:

/toolchain/arm/gcc-arm-8.2-2018.08-x86_64-arm-linux-gnueabi/bin/arm-linux-gnueabi-gcc  -Xlinker -export-dynamic -o python \
                Modules/python.o \
                -L. -lpython2.7 -lpthread -ldl  -lpthread -lutil   -lm
./libpython2.7.so: undefined reference to `minor'
./libpython2.7.so: undefined reference to `major'
./libpython2.7.so: undefined reference to `makedev'
collect2: error: ld returned 1 exit status
make: *** [python] Error 1


用于交叉编译的工具链是gcc-arm-8.2-2018.08-x86_64-arm-linux-gnueabi,可从此处下载:https://developer.arm.com/tools-and-software/open-source-software/developer-tools/gnu-toolchain/gnu-a/downloads/8-2-2018-08
在使用readelf进一步检查/Modules/posixmodule.o可执行文件时,我发现函数major, minormakedev属于UNDEF类别,因此遇到了链接错误。

readelf -s posixmodule.o | grep -i "major"
   409: 00004cb8    20 FUNC    LOCAL  DEFAULT    1 os_major_impl
   410: 00004ccc   124 FUNC    LOCAL  DEFAULT    1 os_major
  1288: 0000065c     1 OBJECT  LOCAL  DEFAULT    5 os_major__doc__
  1629: 00000000     0 NOTYPE  GLOBAL DEFAULT  UND major

readelf -s posixmodule.o | grep -i "major"
   409: 00004cb8    20 FUNC    LOCAL  DEFAULT    1 os_major_impl
   410: 00004ccc   124 FUNC    LOCAL  DEFAULT    1 os_major
  1288: 0000065c     1 OBJECT  LOCAL  DEFAULT    5 os_major__doc__
  1629: 00000000     0 NOTYPE  GLOBAL DEFAULT  UND major

readelf -s posixmodule.o | grep -i "minor"
   404: 00004c28    20 FUNC    LOCAL  DEFAULT    1 os_minor_impl
   405: 00004c3c   124 FUNC    LOCAL  DEFAULT    1 os_minor
  1287: 00000658     1 OBJECT  LOCAL  DEFAULT    5 os_minor__doc__
  1628: 00000000     0 NOTYPE  GLOBAL DEFAULT  UND minor


有人能帮我解决这些错误吗?

pxyaymoc

pxyaymoc1#

glibc 2.28不再在<sys/types.h>中定义'major'、'minor'和'makedev',现在需要包含<sys/sysmacros.h>。
所以如果你真的需要这些特定版本的python,你应该把这个#include添加到调用这些函数的源文件中。

相关问题