编译python模块扩展时如何静态链接库

发布于 2021-01-29 15:06:50

我想修改setup.py文件,以便命令“ python setup.py build”编译基于C的扩展模块,该模块静态(而非动态)链接到库。

该扩展程序当前动态链接到许多库。除了静态链接到一个库外,我想保留所有内容。我已经成功地通过手动修改了对distutils运行的gcc的调用来完成了此操作,尽管它要求我明确列出相关库。

也许这是太多信息,但是为了清楚起见,这是在“ python setup.py build”脚本期间执行的最终链接命令:

gcc -pthread -shared -L/system/lib64 -L/system/lib/ -I/system/include build/temp.linux-x86_64-2.7/src/*.o -L/system/lib -L/usr/local/lib -L/usr/lib -ligraph -o build/lib.linux-x86_64-2.7/igraph/core.so

这是我的手动修改:

gcc -pthread -shared -L/system/lib64 -L/system/lib/ -I/system/include build/temp.linux-x86_64-2.7/src/*.o -L/system/lib -L/usr/local/lib -L/usr/lib /system/lib/libigraph.a -lxml2 -lz -lgmp -lstdc++ -lm -ldl -o build/lib.linux-x86_64-2.7/igraph/core.so

分发Python模块的2.3.4节讨论了库的规范,但是仅“
library_dirs”是合适的,并且这些库是动态链接的。

我正在使用Linux环境进行开发,但是该软件包也将被编译并安装在Windows上,因此我需要一种可移植的解决方案。

有人可以告诉我在哪里寻找说明,或如何修改setup.py脚本吗?(提前致谢!)

我是StackOverflow的新手,所以很抱歉,如果我没有正确标记此问题,或者在发布中犯了其他错误。

关注者
0
被浏览
88
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    如果所有其他方法都失败了,那么对于构建器来说,总是有很少的文档extra_compile_argsextra_link_args选项Extension。(另请参见此处。)

    但是,您可能需要破解一些与OS相关的代码,以获取特定平台的正确参数格式。



知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看