首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用distutils和/或setuptools在mac x上创建.dylib C扩展?

如何使用distutils和/或setuptools在mac x上创建.dylib C扩展?
EN

Stack Overflow用户
提问于 2015-09-06 02:59:05
回答 1查看 1.6K关注 0票数 5

我需要使用distutils (和/或setuptools)创建一个C扩展,它既可以在运行时动态使用,也可以在编译时(用于不同目的)动态使用。这在Linux上不是问题,但它是OS上的一个问题。默认情况下,distutils在OS上创建一个"bundle“(并将其命名为.so),它可以在运行时使用,但不能在编译时使用。我需要制作一个.dylib,它可以在编译时链接到,并且我需要在一个setup.py中完成它,我可以为PyPI打包它。

无论我尝试什么,distutils都会创建一个包,当我试图链接到这个库时,我会得到一个错误。通过在命令行上使用文件,可以显式检查distutils是否创建了包或动态链接库:

代码语言:javascript
复制
file libA.so
libA.so: Mach-O 64-bit bundle x86_64

下面的cc命令给出了我想要的内容:

代码语言:javascript
复制
cc -fPIC -shared source1.o source2.o -o libA.so
file libA.so
libA.so: Mach-O 64-bit dynamically linked shared library x86_64
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-09-24 15:29:46

下面是对我有用的内容(在我的setup.py中添加了行):

代码语言:javascript
复制
if sys.platform == 'darwin':
    from distutils import sysconfig
    vars = sysconfig.get_config_vars()
    vars['LDSHARED'] = vars['LDSHARED'].replace('-bundle', '-dynamiclib')

这个配置在模块_sysconfigdata中似乎是硬连接的。它使用环境变量也是可重写的,因此这也是可行的:

代码语言:javascript
复制
LDSHARED="cc -dynamiclib -undefined dynamic_lookup -arch x86_64 -arch i386 -Wl,-F." python setup.py install
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32419594

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档