gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 03:14:25 25 4
gpt4 key购买 nike

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

无论我尝试什么,distutils 都会不断创建 bundle ,当我尝试链接到该库时,我收到错误。您可以通过在命令行上使用 file 显式检查 distutils 是否创建了 bundle 或动态链接库:

file libA.so
libA.so: Mach-O 64-bit bundle x86_64

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

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

最佳答案

这对我有用(在我的 setup.py 中添加行):

if sys.platform == 'darwin':
from distutils import sysconfig
vars = sysconfig.get_config_vars()
vars['LDSHARED'] = vars['LDSHARED'].replace('-bundle', '-dynamiclib')

此配置似乎是硬连线在模块_sysconfigdata中。它也可以使用环境变量覆盖,因此这也有效:

LDSHARED="cc -dynamiclib -undefined dynamic_lookup -arch x86_64 -arch i386 -Wl,-F." python setup.py install

关于macos - 如何使用 distutils 和/或 setuptools 在 mac os x 上创建 .dylib C 扩展?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32419594/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com