2017-08-03 68 views
0

我正在使用Cython为我有的几个python模块生成编译.so文件。作为outlined in the Cython documentation,你可以按如下方式创建一个setup.py文件:如何使用python distutils将扩展模块交叉编译到不同的体系结构中?

from distutils.core import setup 
from Cython.Build import cythonize 

setup(
    ext_modules = cythonize([ 
     'MyModule1.py', 
     'MyModule2.py', 
     'MyModule3.py' 
    ]) 
) 

,然后建立一个使用命令python3 setup.py build_ext --inplace模块。

这工作正常,但它会创建匹配主机架构的二进制文件(在我的情况下是x86_64)。我想定位一个不同的体系结构(armv7l),它的交叉编译和环境已经有了。 python distutils可以这么做吗?通过extra_compile_args在扩展

+1

我认为你最好的选择是运行一个具有模拟架构的虚拟机,并在本地提供所有可用的工具。 – phd

回答

1

传递一个替代march和相关标志:

sources = ['MyModule1.py', 
      'MyModule2.py', 
      'MyModule3.py'] 

ext_modules=cythonize(sources, 
         extra_compile_args=['-march=armv7l'], 
         library_dirs=[<arm v7 libraries>], 
         include_path=[<arm v7 includes>]) 

要求工作编译工具链armv7l。

基于armv7l的linux的Docker容器可能会更容易使用,并且会自动执行arm构建。

由于可以在脚本中运行Docker容器构建,并为所需的所有体系结构和操作系统生成本地程序包。

相关问题