我使用以下配置命令行选项从头开始交叉编译python-2.7.13
和python-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, minor
和makedev
属于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
型
有人能帮我解决这些错误吗?
1条答案
按热度按时间pxyaymoc1#
glibc 2.28不再在<sys/types.h>中定义'major'、'minor'和'makedev',现在需要包含<sys/sysmacros.h>。
所以如果你真的需要这些特定版本的python,你应该把这个#include添加到调用这些函数的源文件中。