如何使用 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 扩展? 的相关文章

  • 创建证书以通过 bash 在 Mac OS X 上签署 GDB

    我正在尝试通过以下方式在 Mac OS X 上安装 gdblink1 http www patosai com blog post installing gdb on mac os x yosemite and link2 http ntr
  • 为什么我无法在 OS X 上更改 tkMessagebox.askyesno() 上的图标?

    tkMessageBox askyesno Title Message icon tkMessageBox WARNING 在 OS X 上只给我火箭图标 我知道 OS X 和 tkMessageBox 图标有些奇怪 因为tkMessage
  • Python libusb pyusb“mach-o,但架构错误”

    我在使用 pyusb 模块时遇到一些问题 我已将问题范围缩小到一行 并创建了一个小示例脚本来复制错误 usr bin env python This module was created to isolate the problem in
  • 如何配置 VS Code 以便能够单步执行调试 Python 脚本时加载的共享库 (.so)?

    从命令行使用 gdb 我可以在加载共享库时中断 知道我有共享库的源代码 如何在 VS Code 中获得相同的行为 对我来说 它以某种方式起作用 这是我的设置 Ubuntu 18 04 调试我从 Python3 加载的 C 共享库 更具体地说
  • 阅读 setup.py 中的 README

    所以 我想要long description我的设置脚本的内容是我的README md文件 但是当我这样做时 源代码发行版的安装将失败 因为python setup py sdist不复制自述文件 有没有办法让distutils core
  • 如何在 mac os 10.6 上安装brew或homebrew

    我已经尝试过多次了 谁能告诉我具体的详细步骤吗 我的Mac操作系统是10 6 8 它抱怨一些丢失的包裹 使用它在 Mac OSX 10 6 8 上安装 ruby e curl fsSL https raw githubusercontent
  • CGContextDrawImage 绘制非常模糊的大图像

    我正在尝试制作一个可以使用 CGContextDrawImage 绘制大图像 例如 2048 x 1537 图像的一部分的对象 它工作得很好 只是它非常模糊 我正在使用一个 drawingController 它覆盖了drawLayer i
  • 使 pycaffe 致命错误:找不到“Python.h”文件

    我在运行 OSX 10 9 5 的 Mac 上编译了 caffe 并且我知道尝试编译 pycaffe 当我在 caffe 根文件夹中运行 make pycaffe 时 我得到 CXX LD o python caffe caffe so p
  • NSTokenField:标记的不同颜色

    我在我的 xib 中创建了一个 NSTokenField 我想在 tokenField 中显示不同颜色的令牌 含义 一些标记将是蓝色的 其余的将是红色的 根据其内容 那可能吗 以下代码对我不起作用 我希望有人能帮助我 id tokenFie
  • 有没有办法在 OSX 中安装 gcc 而无需安装 Xcode?

    我用谷歌搜索了一下 似乎没有办法在 OS X 上安装 gcc 而不安装 Xcode 至少需要 1 5GB 的空间 我需要的只是 gcc 而不是 Xcode 附带的其他垃圾 此时 我将采用任何其他类型的 C 编译器 我知道我可以简单地安装 X
  • 在 Mac 上运行 Tkinter

    我是一个绝对的新手 我正在尝试为我的学校项目制作 Python GUI 所以我决定使用 Tkinter 当我尝试导入 Tkinter 时 它会抛出以下消息 gt gt gt import tkinter Traceback most rec
  • webview渲染完成后如何截图

    我想在 webview 渲染完成时截图 以下是我的代码 void webView WebView sender didFinishLoadForFrame WebFrame frame if frame sender mainFrame r
  • 为什么 OS X 和 Linux 之间的 UTF-8 文本排序顺序不同?

    我有一个包含 UTF 8 编码文本行的文本文件 mac os x cat unsorted txt foo foo 津 如果它有助于重现问题 这里是文件中确切字节的校验和和转储 以及如何自己生成文件 在 Linux 上 使用base64 d
  • 如何在 Mac 上使用 Process.Start() 或等效的 Mono 并传入参数

    我正在尝试编写一些 C 代码来启动浏览器Process Start app args 其中 apps 是浏览器的路径 例如 Applications Google Chrome app Contents MacOS Google Chrom
  • 为 Linux 编译 Objective-C 应用程序(API 覆盖范围)

    我可能在这里问一些奇怪的问题 但我不确定从哪里开始 问题是我正在考虑使用 Obj C 和 Foundation 类在 Mac 上编写一个命令行工具 但存在一个非常大的风险 那就是我希望能够为不同的 Linux 发行版编译它 以便将来作为服务
  • QFileSystemModel setRootPath

    我正在尝试创建一个 Qt 应用程序来显示文件夹 Mac OS 中的 Users 文件夹 的内容 这是代码 QFileSystemModel dirModel new QFileSystemModel dirModel gt setRootP
  • 强制 Apache HTTPD 以 32 位运行

    我通过从二进制文件 以及 ppc 部分 中剥离 32 位架构 以 64 位模式运行 Apache HTTPD 我这样做是为了使其与 python 和 mysql 更加兼容 然而 我有另一台机器需要它以 32 位模式运行 它仍然保留所有四种原
  • 在 Cocoa OS X AVPlayer 中播放 HLS (m3u8) - Swift

    基本上我正在尝试在 Cocoa Swift 中使用 AVPlayer 播放 m3u8 HLS Live Stream 我对这门语言比较陌生 所以基本上掌握了一些示例代码 http qiita com ono matope items 23d
  • 如何将 UILabel 的值绑定到实例变量?

    我是 mac objective c 的新手 我的问题是 我想知道是否可以将 UILabel 文本绑定到变量 而不必在值更改时手动设置文本 例如 在 Mac OS 上 当我打开新的 Finder 窗口并删除文件时 任务栏中的全局可用空间就会
  • OpenCV 无法从 MacBook Pro iSight 捕获

    几天后 我无法再从 opencv 应用程序内部打开我的 iSight 相机 cap cv2 VideoCapture 0 返回 并且cap isOpened 回报true 然而 cap grab 刚刚返回false 有任何想法吗 示例代码

随机推荐

  • 崇高改变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 上创建