- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我正在尝试为 Android 交叉编译 Python 3.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)
我正在构建 bzip2 1.0.6 没有任何问题,但我假设我没有正确链接到它或其他一些问题。我应该构建某种其他架构吗?
最佳答案
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 生成文件不是为交叉编译编写的。它们有效地忽略了用户的标志,如 CFLAGS
和 LDFLAGS
。 makefile 实际上清除了用户的 CFLAGS
并将其设置为 CFLAGS=-Wall -Winline -O2 -g $(BIGFILES)
。您的标志如 -target aarch64-none-linux-androideabi22
未被使用。
有两个 Makefile 在起作用。一个叫做 Makefile
,如果我没记错的话,它会构建静态库。第二个是 Makefile-libbz2_so
,它构建共享对象。您需要修复遗漏并将修复应用到两个 makefile。
你可能应该使用像 bzip2-noloader 这样的补丁 Bzip .它尊重用户的CFLAGS
、CXXFLAGS
、LDFLAGS
等。感兴趣的 checkin 是Commit 34d170f31106。 .
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
:
bzip2: libbz2.a bzip2.o
$(CC) $(CPPFLAGS) $(BZIP_CFLAGS) $(CFLAGS) $(LDFLAGS) -o bzip2 bzip2.o -L. -lbz2
最后,bzip2-noloader fork 还支持 PREFIX
、DESTDIR
等。因此您也可以执行分阶段安装。
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
使用不寻常的名称,例如 ranlib-5.0
。还要确保工具在路径上。
编写 makefile 以避免此类问题的方法详见 7.2.3 Variables for Specifying Commands在 GNU 编码标准中。简而言之,(1)为用户留下CFLAGS
(和 friend ); (2) 如果需要一个标志,那么总是提供它。
GNU 编码标准以此为例:
CFLAGS = -g
ALL_CFLAGS = -I. $(CFLAGS)
.c.o:
$(CC) -c $(CPPFLAGS) $(ALL_CFLAGS) $<
用户可以覆盖-g
的默认CFLAGS
,并且总是添加-I
,因为编译需要它。
关于android - 构建 Python 3.7 时 bz2 模块失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56350432/
我应该如何在 lex(或 flex)中进行编程以从文本中删除嵌套注释并仅打印不在注释中的文本?我可能应该以某种方式识别我在评论中时的状态以及 block 评论的起始“标签”的数量。 让我们制定规则:
我按照 bz's demo 创建了一个可调整大小的表格列代码 但是当我创建超过 30 个列时,代码不起作用。我正在创建的表格非常简单: Column 1
我从我的教授那里得到了这个问题。 取一个整数 N 和一个具有 X 个整数的数组 A(非空)。您需要将数组 A 分成两部分,第一个数组 Ax(左数组)包含等于整数 N 的数字,数组 Ay(右数组)包含相
我发现很多页面都在说明如何解压 tar.bz2 文件,但是如何解压 tar.bz 文件呢? 最佳答案 使用 tar 的 -j 选项。 tar -xjf /path/to/archive.tar.bz
我想写一个匹配的正则表达式 a a-b 但前提是这些序列后面没有 Z ((a(-b)?)(?!Z)) a matches a ok a-b matches a-b
我正在尝试运行一些面部正面化代码(在 Windows10 上使用 Python3),该代码使用 opencv 和 dlib 并需要一个名为 shape_predictor_68_face_landma
尝试从 cassandra 执行 WordCount 示例并出现错误: 线程“主”java.lang.NoSuchMethodError 中的异常:org.apache.thrift.meta_dat
我正在尝试编写一个实用函数来打开三种不同类型的文件:.bz2、.gz 和 .txt。我不能只使用 File.read,因为它会返回压缩文件的垃圾。我正在尝试使用 Open3.popen3 以便我可以给
我是一名优秀的程序员,十分优秀!