【发布时间】:2014-10-06 21:51:30
【问题描述】:
我想为 ARM-Cortex-A8 处理器 (AM335) 交叉编译 PyZmq。但在我的情况下,编译器正在使用该处理器不可用的标志运行。
我关注了this 和this 的帖子,并考虑到提到的补丁已经过时,我目前正在遵循这个程序:
- 有可用的目标工具链(已测试)
- 使用此工具链编译 ZeroMQ(有效)
- 拥有可用于目标的 python3 库和头文件
- 已安装 Cython for Python3(用于主机平台)
-
我的 setup.cfg 如下所示:
[global] have_sys_un_h = False [build_ext] libraries = python3.1 library_dirs = ../path/to/target/python/lib/python3.1 include_dirs = ../path/to/target/python/include/python3.1/ [bdist_egg] plat-name = linux-armv
然后我运行:
git clone git://github.com/zeromq/pyzmq.git pyzmq-arm-cortexa8/
cd pyzmq-git-arm-cortexa8/
export PATH=/path/to/compiler/bin:$PATH
export CC="arm-cortexa8-linux-gnueabihf-gcc"
export LDSHARED="arm-cortexa8-linux-gnueabihf-gcc -shared"
python3 ./setup.py configure --zmq=../zeromq-4.0.4-arm-cortexa8/
python3 ./setup.py build
但随后构建 Cython 生成的文件失败 - 输出为:
running build
running build_py
running build_ext
running configure
Warning: Skipping zmq version check
************************************************
skipping 'zmq/backend/cython/_device.c' Cython extension (up-to-date)
building 'zmq.backend.cython._device' extension
arm-cortexa8-linux-gnueabihf-gcc -Wno-unused-result -DDYNAMIC_ANNOTATIONS_ENABLED=1 -DNDEBUG -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches -m64 -mtune=generic -D_GNU_SOURCE -fPIC -fwrapv -fPIC -I../zeromq-4.0.4-arm-cortexa8/include -Izmq/utils -Izmq/backend/cython -Izmq/devices -I../platform-phyCORE-AM335x/sysroot-target/usr/include/python3.1/ -I/usr/include/python3.3m -c zmq/backend/cython/_device.c -o build/temp.linux-x86_64-3.3/zmq/backend/cython/_device.o
arm-cortexa8-linux-gnueabihf-gcc: error: unrecognized command line option '-fstack-protector-strong'
arm-cortexa8-linux-gnueabihf-gcc: error: unrecognized command line option '-m64'
arm-cortexa8-linux-gnueabihf-gcc: error: unrecognized argument in option '-mtune=generic'
arm-cortexa8-linux-gnueabihf-gcc: note: valid arguments to '-mtune=' are: arm1020e arm1020t arm1022e arm1026ej-s arm10e arm10tdmi arm1136j-s arm1136jf-s arm1156t2-s arm1156t2f-s arm1176jz-s arm1176jzf-s arm2 arm250 arm3 arm6 arm60 arm600 arm610 arm620 arm7 arm70 arm700 arm700i arm710 arm7100 arm710c arm710t arm720 arm720t arm740t arm7500 arm7500fe arm7d arm7di arm7dm arm7dmi arm7m arm7tdmi arm7tdmi-s arm8 arm810 arm9 arm920 arm920t arm922t arm926ej-s arm940t arm946e-s arm966e-s arm968e-s arm9e arm9tdmi cortex-a15 cortex-a5 cortex-a7 cortex-a8 cortex-a9 cortex-m0 cortex-m1 cortex-m3 cortex-m4 cortex-r4 cortex-r4f cortex-r5 ep9312 fa526 fa606te fa626 fa626te fa726te fmp626 generic-armv7-a iwmmxt iwmmxt2 mpcore mpcorenovfp native strongarm strongarm110 strongarm1100 strongarm1110 xscale
error: command 'arm-cortexa8-linux-gnueabihf-gcc' failed with exit status 1
(当我运行 python3 setupegg.py build bdist_egg 时也会发生同样的情况,但我不需要鸡蛋)
因此,出于某种原因,生成的源代码是用适合我的主机系统但不适合目标编译器的标志构建的:-fstack-protector-strong、-m64和 -mtune=generic。 我尝试修改 CFLAGS 和 OPT 就像提到的here 但尽管这不起作用我怀疑这是最复杂的方法..
所以问题是:我在这里做错了什么?如何告诉设置过程为交叉编译器提供正确的标志?为什么这个过程似乎适用于应该产生相同错误的 Android-NDK?
顺便说一句。我正在开发最近的 Fedora 20 / x86_64
【问题讨论】:
标签: python gcc cross-compiling distutils pyzmq