python - 使用一些arm-gcc交叉编译PyZMQ

标签 python gcc cross-compiling distutils pyzmq

我要交叉编译PyZmq适用于 ARM-Cortex-A8 处理器 (AM335)。但就我而言,编译器正在使用该处理器不可用的标志运行。

我关注了thisthis发布并考虑到提到的补丁已过时,我目前正在遵循此过程:

  • 有可用的目标工具链(已测试)
  • 使用此工具链编译 ZeroMQ(有效)
  • 有可用于目标的 python3 库和 header
  • 已安装适用于 Python3 的 Cython(针对主机平台)
  • 我的 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。 我尝试像提到的那样修改 CFLAGSOPT here但尽管这不起作用,我怀疑这是否是最复杂的方法..

所以问题是:我在这里做错了什么?如何告诉设置过程向交叉编译器提供正确的标志?为什么这个过程似乎适用于 Android-NDK,并且会产生相同的错误?

顺便说一句。我正在开发最近的 Fedora 20/x86_64

最佳答案

替代解决方案

你尝试过吗Buildroot ?它同时提供Python3和zmq。

git clone git://git.buildroot.net/buildroot
cd buildroot
make beaglebone_defconfig
make menuconfig

在菜单中选择外部工具链,在“目标包”下选择Python3和zmq,然后在Python3外部包下选择python-pyzmq。

make 

关于python - 使用一些arm-gcc交叉编译PyZMQ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25287820/

相关文章:

python - 理解Python中的命令-查询分离

python - 根据条件和列索引位置应用函数

Python:沿三次样条找到x(返回y),产生等距离的连续(x,y)对

c - 是否有预处理器选项来检查 hdf5 的可用性?

mono - 为 MIPS 交叉编译 Mono 框架 3.0.6+

python - 你如何使用kivy设计语言使窗口全屏显示?

windows - 较新的 cygwin gcc

c - ncurses:警告:取消引用 ‘void *’ 指针

android - 基本的 Android 应用问题

找不到 CMAKE 交叉编译库