Python 使用一些armgcc交叉编译PyZMQ

Python 使用一些armgcc交叉编译PyZMQ,python,gcc,cross-compiling,distutils,pyzmq,Python,Gcc,Cross Compiling,Distutils,Pyzmq,我想交叉编译一个ARM-Cortex-A8处理器(AM335)。但在我的例子中,编译器运行时使用的标志对此处理器不可用 我遵循并发布了,考虑到提到的补丁已经过时,我目前遵循以下步骤: 有可用的目标工具链(已测试) 使用此工具链编译ZeroMQ(works) 使python3库和头文件可用于目标 安装Cython for Python3(用于主机平台) my setup.cfg如下所示: [global] have_sys_un_h = False [build_ext] libraries =

我想交叉编译一个ARM-Cortex-A8处理器(AM335)。但在我的例子中,编译器运行时使用的标志对此处理器不可用

我遵循并发布了,考虑到提到的补丁已经过时,我目前遵循以下步骤:

  • 有可用的目标工具链(已测试)
  • 使用此工具链编译ZeroMQ(works)
  • 使python3库和头文件可用于目标
  • 安装Cython for Python3(用于主机平台)
  • my 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
时也会发生同样的情况,但我并不需要这个egg)

因此,出于某种原因,生成的源代码使用适合我的主机系统但不适合目标编译器的标志进行构建:-fstack-protector-strong-m64-mtune=generic。 我试图修改前面提到的CFLAGSOPT,但尽管这不起作用,我怀疑这是最复杂的方法

所以问题是:我做错了什么?如何告诉安装过程向交叉编译器提供正确的标志?为什么这个过程似乎与Android NDK一起工作,而Android NDK应该会产生相同的错误


顺便说一句,我正在开发一款新的软呢帽20/x86\u 64替代解决方案

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

git clone git://git.buildroot.net/buildroot
cd buildroot
make beaglebone_defconfig
make menuconfig
在“选择外部工具链”菜单中,选择“目标软件包”下的Python3和zmq,然后选择Python3外部软件包下的python pyzmq

make 

+1对于该工具-目前我仍在寻找distutils无法正确构建pyzmq的原因,并且将Buildroot集成到我的自动构建中会带来大量开销。但至少它可以帮助我找到问题的答案:)我正在使用BR和Jenkins来执行集成测试。到目前为止看起来不错。至少是为了满足我的需要:-)