构建python3.7时bz2模块失败

2024-09-30 06:29:43 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试为Android交叉编译python3.7。我在输出中看到bz2如果失败并出现以下错误

building '_bz2' extension
/home/dematic/SPE/python3-android/sdk/android-ndk-r19c/toolchains/llvm/prebuilt/linux-x86_64/bin/clang -isystem /home/dematic/SPE/python3-android/build/19c-22-aarch64-linux-androideabi-4.9/include -isystem /home/dematic/SPE/python3-android/build/19c-22-aarch64-linux-androideabi-4.9/include/openssl -no-integrated-as -I. -I./Include -target aarch64-none-linux-androideabi22 -target aarch64-none-linux-androideabi22 -Wno-unused-result -Wsign-compare -Wunreachable-code -DNDEBUG -g -fwrapv -O3 -Wall -fPIC -fPIC -std=c99 -Wextra -Wno-unused-result -Wno-unused-parameter -Wno-missing-field-initializers -Wstrict-prototypes -Werror=implicit-function-declaration -I./Include -I. -I/home/dematic/SPE/python3-android/src/Python-3.7.3/Include -I/home/dematic/SPE/python3-android/src/Python-3.7.3 -c /home/dematic/SPE/python3-android/src/Python-3.7.3/Modules/_bz2module.c -o build/temp.linux-aarch64-3.7/home/dematic/SPE/python3-android/src/Python-3.7.3/Modules/_bz2module.o
/home/dematic/SPE/python3-android/sdk/android-ndk-r19c/toolchains/llvm/prebuilt/linux-x86_64/bin/clang -isystem /home/dematic/SPE/python3-android/build/19c-22-aarch64-linux-androideabi-4.9/include -isystem /home/dematic/SPE/python3-android/build/19c-22-aarch64-linux-androideabi-4.9/include/openssl -no-integrated-as -shared -target aarch64-none-linux-androideabi22 -fuse-ld=lld -L /home/dematic/SPE/python3-android/build/19c-22-aarch64-linux-androideabi-4.9/lib -target aarch64-none-linux-androideabi22 -fuse-ld=lld -L /home/dematic/SPE/python3-android/build/19c-22-aarch64-linux-androideabi-4.9/lib -target aarch64-none-linux-androideabi22 -fuse-ld=lld -L /home/dematic/SPE/python3-android/build/19c-22-aarch64-linux-androideabi-4.9/lib -fPIC -target aarch64-none-linux-androideabi22 build/temp.linux-aarch64-3.7/home/dematic/SPE/python3-android/src/Python-3.7.3/Modules/_bz2module.o -L. -L/home/dematic/SPE/python3-android/build/19c-22-aarch64-linux-androideabi-4.9/lib -lbz2 -lpython3.7m -o build/lib.linux-aarch64-3.7/_bz2.cpython-37m.so
ld.lld: error: /home/dematic/SPE/python3-android/build/19c-22-aarch64-linux-androideabi-4.9/lib/libbz2.a(bzlib.o) is incompatible with aarch64linux
clang: error: linker command failed with exit code 1 (use -v to see invocation)

我正在构建bzip21.0.6,没有任何问题,但是我假设我没有正确地链接到它或者其他问题。还有什么其他的建筑我应该建造吗?在

这就是我要做的项目 https://github.com/GRRedWings/python3-android


Tags: buildsrcnonetargethomelinuxlibpython3
1条回答
网友
1楼 · 发布于 2024-09-30 06:29:43

I'm trying to cross compile Python 3.7 for Android. I see in my output that bz2 if failing with the following error

Bzip2 makefile不是为交叉编译而编写的。它们实际上忽略了用户的标志,如CFLAGSLDFLAGS。makefile实际上删除了用户的CFLAGS,并将其设置为CFLAGS=-Wall -Winline -O2 -g $(BIGFILES)。不使用-target aarch64-none-linux-androideabi22等标志。在

有两个makefile正在运行。其中一个名为Makefile,如果我没记错的话,它将构建静态库。第二个是Makefile-libbz2_so,它构建共享对象。您需要修复遗漏并将修复应用于两个makefile。在

您可能应该使用类似bzip2-noloader这样的修补Bzip。它尊重用户的CFLAGSCXXFLAGSLDFLAGS等,感兴趣的签入是{a2}。在

bzip2-noloader中的makefile配方如下所示。它们在BZIP_CFLAGS中保留了Seward的原始设置。但它们也利用CPPFLAGS,并允许CFLAGS中的用户重写。重写将拾取您的标志,如-target aarch64-none-linux-androideabi22。在

blocksort.o: blocksort.c
    $(CC) $(CPPFLAGS) $(BZIP_CFLAGS) $(CFLAGS) -c blocksort.c

程序按预期使用LDFLAGS

^{pr2}$

最后,bzip2-noloader分叉还支持PREFIXDESTDIR等,因此您也可以执行分阶段安装。在


I am building bzip2 1.0.6 without any issues ...

您可能正在为i686或x86_64构建,而不是Aarch64。直到链接时间问题才会浮出水面。如果感兴趣,可以使用objdump检查对象文件。在


另请注意,makefile执行以下操作:

CC=gcc
AR=ar
RANLIB=ranlib
LDFLAGS=

您可能还需要调整这些变量的分配。有时ar和{}使用不寻常的名称,比如ranlib-5.0。同时也要确保工具在路径上。在


编写makefile以避免这类问题的方法在GNU编码标准中的7.2.3 Variables for Specifying Commands中有详细说明。它的缺点是:(1)给用户留下CFLAGS(和朋友);以及(2)如果需要一个标志,则始终提供它。在

GNU编码标准以此为例:

^{4}$

用户可以重写-g的默认CFLAGS,并且总是添加{},因为编译需要它。在

相关问题 更多 >

    热门问题