我编写了一个小的Python扩展,它与一个带有一个可选的.S(汇编程序)文件的小型C库捆绑,编译和静态链接。 Distutils的Extension()默认不识别.S。有没有一种很好的方法来编译该文件,或者我应该掏空make
?现在我只为稍慢的库编译C代码。
我不知道它有多新,但是Extension
类有一个extra_objects
参数,我发现它可以指定汇编文件。所以例如,我的setup.py
看起来像这样:
example_module = Extension('_example',
extra_compile_args = ['-Wall', '-g', '-std=c++11'],
sources=['something.cpp'],
extra_objects=['asm_amd64.s'])
我仔细检查过,如果用nm -D example.so
检查生成的库,如果将它包含在extra_objects
中,则汇编函数会正确汇编并链接,但如果不在该参数中包含它们,则它们不会链接。所以它似乎工作。
作为分布式,distutils不知道汇编代码,我不知道它的扩展,让它自动处理它。在类似的情况下,我总是单独构建库(根据需要和可行的C和汇编)并且仅使用生成的.a
和setup.py。
有关此的公开功能请求:http://bugs.python.org/issue2942