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

2024-04-01

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

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

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
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用 distutils 和/或 setuptools 在 mac os x 上创建 .dylib C 扩展? 的相关文章

随机推荐

  • 崇高改变highlight_modified_tabs的颜色?

    In Sublime Text 2编辑器中 我们可以使用以下命令更改 修改 编辑选项卡 的 文本颜色 highlight modified tabs true像那样 有用 但它是鲜红色的 我该如何改变text color of it 这些设
  • 如何在 Rails 中拥有不同的环境变量值?

    这就是我跑步的方式rails console命令 COMPANY b2b RAILS ENV development DEPLOY ENV localhost rails console 相反 我只想跑步rails console通过在内部
  • Java 将枚举编译成什么?

    我和一位同事讨论了 Java 如何表示枚举 我的印象是它们是严格的整数 就像 C C 一样 或者 如果您添加行为 类型安全枚举 它将被包装在一个类中 他相信如果它足够小 Java 会将其压缩为一个字节 不过 我在 Oracle 网站上发现了
  • 组织依赖项目的最佳方式?

    我有一组依赖于其他项目 你可以说实用程序 的项目 问题是每次我更改这些实用程序中任何一个的代码时 我的同事都需要采用最新的代码并在他们的计算机上构建以使用最新的代码组件 有没有好的标准溶液 或者只是将 dll 集中在共享文件夹中 P S 我
  • 谷歌地图 API 点标记

    目前我使用 StyledMarker 图标 带有自定义颜色的默认气泡图标 但我发现有些网站使用更紧凑的 点 点标记的图片 http 3 bp blogspot com kgIKcUsffkA TspZ9QrlraI AAAAAAAAAZc
  • com.google.gson.JsonPrimitive 无法转换为 com.google.gson.JsonObject

    我有一个来自 PHP 的 json 列表 Json test 1 message try it test 2 message try it test 3 message try it final error gt 1 json gt jso
  • 为什么路由不能与 ElasticSearch Bulk API 一起使用?

    我正在向 ElasticSearch 设置批量请求并指定要路由到的分片 但是当我运行它时 文档会被发送到不同的分片 这是 ElasticSearch 批量中的错误吗 当我只索引单个文档时它就有效 当我搜索时它有效 但当我进行批量导入时则不然
  • 如何在混合移动应用程序中实施 Google Analytics?

    我正在使用 HTML5 CSS 和 jQuery Mobile 编写一个混合移动应用程序 我将使用 Cordova Js 将 HTML5 应用程序转换为适用于 iOS 和 Android 的本机移动应用程序 我想使用 Google Anal
  • vim 有 C++11 语法文件吗?

    特别是初始化列表的显示非常糟糕 vector
  • 为什么 vue v-model 不适用于数组 prop?

    我有一个自定义组件 它采用modelValue道具并发出update modelValue事件 在父组件中 我传递一个数组 测试组件 vue
  • Azure 服务总线“发送”抛出由于对象的当前状态而导致操作无效

    我不确定发生了什么变化 但突然我得到一个 InvalidOperationException 由于对象的当前状态 操作无效 我的代码以前确实有效 但我不记得更改过任何内容 我正在使用 Microsoft Azure ServiceBus 4
  • 创建 d3.js SVG 文本元素后获取其宽度

    我正在尝试获取一堆的宽度text我用 d3 js 创建的元素 这就是我创建它们的方式 var nodesText svg selectAll text data dataset enter append text text function
  • 如何在会话中运行多个图 - Tensorflow API

    张量流API https github com tensorflow models tree master research object detection提供了一些预先训练的模型 并允许我们使用任何数据集来训练它们 我想知道如何在一个张
  • 在 Pydroid 3 终端中安装 Git

    我正在使用 Pydroid3 并且想在 Pydroid 终端中使用 Git 在我的 Termux 终端中 我能够按照此处所述安装 Git git 命令现在只能在 Termux 终端中识别 但不能在 Pydroid 中识别 无法在 Pydro
  • Keras/Tensorflow 中涉及梯度的自定义损失函数

    我发现这个问题之前已经被问过几次了 但没有任何解决方案 我的问题很简单 我想实现一个损失函数 它计算预测梯度和真值之间的 MSE 最终转向更复杂的损失函数 我定义了以下两个函数 def my loss y true y pred x dyd
  • 自定义警报对话框边框

    我正在创建一个自定义对话框 其示例代码为 final AlertDialog dialog protected AlertDialog createDialog int dialogId AlertDialog Builder builde
  • 如何设计深度卷积神经网络? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 据我了解 所有 CNN 都非常相似 它们都有一个卷积层 后面是池化层和 relu 层 有些具有专门的层 例如 FlowNet 和 Segn
  • Iphone 迭代 NSString 的子字符串出现次数

    我想找到 NSString 中所有出现的子字符串 并逐一迭代以对该 NSString 进行一些更改 我该怎么做呢 怎么样 find first occurrence of search string in source string NSR
  • Angular2 模块级样式表

    我正在使用模块化结构设计我的网站sass questions tagged sass我愿意以这样的方式组织样式表 在每个模块级别 而不是组件级别 定义样式表 然后将其导入所有组件中以保持整个模块的标准布局 那么这是一个好方法吗 如果是的话
  • 如何使用 distutils 和/或 setuptools 在 mac os x 上创建 .dylib C 扩展?

    我需要使用 distutils 和 或 setuptools 创建一个 C 扩展 它可以在运行时和编译时动态使用 用于不同的目的 这在 Linux 上不是问题 但在 OS X 上却是问题 默认情况下 distutils 在 OS X 上创建