我想修改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的新手,所以很抱歉,如果我没有正确标记此问题,或者在发布中犯了其他错误。
如果所有其他方法都失败了,那么对于构建器来说,总是有很少的文档extra_compile_args
和extra_link_args
选项Extension
。(另请参见此处。)
但是,您可能需要破解一些与OS相关的代码,以获取特定平台的正确参数格式。
问题内容: 我正在按照本教程讲解如何使用C\ C ++代码扩展Python。 名为“使用Microsoft Windows的GCC构建扩展模块”部分对我来说失败,并出现以下错误: 名为“使用Microsoft Visual C ++构建扩展模块”的部分也失败,并显示类似错误: 我应该怎么做才能解决这个问题? 问题答案: 您是否拥有python dev文件,以便可以找到Python.h? 您是否已将
问题内容: 我在Ubuntu(arm-linux-gnueabi- gcc)中有一个ARM交叉编译器,默认体系结构是ARMv7。但是,我想编译一个ARMv5二进制文件。我通过为编译器提供选项来实现。 到目前为止,一切都很好。由于我的ARM系统使用BusyBox,因此必须编译静态链接的二进制文件。所以我给gcc 选项。 但是,链接器链接到我的ARMv5二进制文件的 libc.a 出现问题。该文件使用
我正在开发一个包(模块?)设计为pip安装。该包包含一个C扩展,使用pybind11包装,它链接到其他一些库。 我能够手动编译和链接扩展库,没有问题,但是我无法正确配置我的文件,以便在调用时安装扩展模块。 我一直遵循这段代码(pybind11文档链接到)来配置我的文件,包含在下面。 为完整起见,我的包目录如下所示: 我按如下方式调用pip3安装: (版本检查被禁用,因为机器无法访问互联网)。 我可
dc_motor_driver --- 双直流电机驱动模块 功能相关函数 dc_motor_driver.set_power(speed, ch = 0) 设置双路直流电机各路电机的动力,参数: speed 控制目标电机的动力值,参数范围是 -100 ~ 100。 ch 控制的电机通道,参数范围是 0 ~ 2,其中 0 表示两路电机通道,1 表示插槽1通道,2 表示插槽2通道。 程序示例 impo
问题内容: 我有几个python模块(组织成包),它们 相互依赖 。例如 模块1 Module2:导入Module1 模块3 Module4:导入Module3,Module 2,Module 1 假设开发应用程序的相关接口在Module4中,而我想使用 cython 生成 Module4.so 。如果我以幼稚的方式进行操作,则会得到扩展Module4.so,但可以导入该扩展, 但 该扩展 依赖于
问题内容: 我试图将静态库(与gcc一起编译)链接到C 程序,但出现了“未定义引用”。我在ubuntu 12.04服务器计算机上使用了gcc和g 版本4.6.3。例如,这是阶乘方法的简单库文件: mylib.h mylib.c 我使用gcc为此mylib.c创建了对象: 再次使用AR实用工具从目标文件创建了静态库: 我用C程序(test.c)和C ++程序(test.cpp)测试了这个库 C和C