Python ctypes 和动态链接

2024-02-05

我正在用 C 编写一些库,其中包含我想通过 ctypes 从 Python 调用的函数。

我已经在另一个库中成功完成了此操作,但是该库只有非常普通的依赖项(即fstream, math, malloc, stdio, stdlib)。我正在开发的另一个库具有更复杂的依赖关系。

例如,我会尝试使用fftw3。作为测试,我将尝试编译一个简单的.cpp文件包含:

int foo()
{
    void *p  = fftw_malloc( sizeof(fftw_complex)*64 );
    fftw_free(p);

    printf("foo called.\n");

    return 0;
}        

我将其编译为:

icpc -Wall -fPIC -c waveprop.cpp -o libwaveprop.o $std_link
icpc -shared -Wl,-soname,libwaveprop.so.1 -o libwaveprop.so.1.0 libwaveprop.o 

cp waveprop.so.1.0 /usr/local/lib/
rm waveprop.so.1.0
ln -sf /usr/local/lib/waveprop.so.1.0 /usr/local/lib/waveprop.so
ln -sf /usr/local/lib/waveprop.so.1.0 /usr/local/lib/waveprop.so.1

这一切都有效。现在我用另一个测试它.cpp文件包含:

int main()
{
    foo();
}

Result:

icpc test.cpp -lwaveprop 
/lib/../lib64/libwaveprop.so: undefined reference to `fftw_free'
/lib/../lib64/libwaveprop.so: undefined reference to `fftw_malloc'

这是完全合理的。接下来我尝试:

icpc test.cpp -lwaveprop -lfftw3
./a.out
foo called.

伟大的!但现在当我尝试使用 ctypes 加载库时:

>>> from ctypes import *
>>> print cdll.LoadLibrary('/usr/local/lib/libwaveprop.so.1')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/lib64/python2.6/ctypes/__init__.py", line 431, in LoadLibrary
    return self._dlltype(name)
  File "/usr/lib64/python2.6/ctypes/__init__.py", line 353, in __init__
    self._handle = _dlopen(self._name, mode)
OSError: /usr/local/lib/libwaveprop.so.1: undefined symbol: fftw_free

所以这是同样的问题,但我不知道如何解决 ctypes 的问题。我尝试了各种方法但没有成功,而且我现在陷入了困境。


好的,谢谢你的帮助。

为了让它工作,我必须在链接时包含依赖项(废话)。我之前尝试过这个,但遇到了错误,所以解决这个问题我必须使用“-fpic”作为 CPP 标志重新编译 fftw。现在一切正常。

icpc -Wall -fPIC -c waveprop.cpp -o libwaveprop.o $std_link
icpc -shared -Wl,-soname,libwaveprop.so.1 -o libwaveprop.so.1.0 libwaveprop.o -lfftw3

cp waveprop.so.1.0 /usr/local/lib/
rm waveprop.so.1.0
ln -sf /usr/local/lib/waveprop.so.1.0 /usr/local/lib/waveprop.so
ln -sf /usr/local/lib/waveprop.so.1.0 /usr/local/lib/waveprop.so.1

谢谢, -缺口

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

Python ctypes 和动态链接 的相关文章

  • 如何查看Databricks中的所有数据库和表

    我想列出 Azure Databricks 中每个数据库中的所有表 所以我希望输出看起来像这样 Database Table name Database1 Table 1 Database1 Table 2 Database1 Table
  • Python 中的 Lanczos 插值与 2D 图像

    我尝试重新缩放 2D 图像 灰度 图像大小为 256x256 所需输出为 224x224 像素值范围从 0 到 1300 我尝试了两种使用 Lanczos 插值来重新调整它们的方法 首先使用PIL图像 import numpy as np
  • Python 的键盘中断不会中止 Rust 函数 (PyO3)

    我有一个使用 PyO3 用 Rust 编写的 Python 库 它涉及一些昂贵的计算 单个函数调用最多需要 10 分钟 从 Python 调用时如何中止执行 Ctrl C 好像只有执行结束后才会处理 所以本质上没什么用 最小可重现示例 Ca
  • 将 Matplotlib 误差线放置在不位于条形中心的位置

    我正在 Matplotlib 中生成带有错误栏的堆积条形图 不幸的是 某些层相对较小且数据多样 因此多个层的错误条可能重叠 从而使它们难以或无法读取 Example 有没有办法设置每个误差条的位置 即沿 x 轴移动它 以便重叠的线显示在彼此
  • 使 django 服务器可以在 LAN 中访问

    我已经安装了Django服务器 可以如下访问 http localhost 8000 get sms http 127 0 0 1 8000 get sms 假设我的IP是x x x x 当我这样做时 从同一网络下的另一台电脑 my ip
  • 如何在flask中使用g.user全局

    据我了解 Flask 中的 g 变量 它应该为我提供一个全局位置来存储数据 例如登录后保存当前用户 它是否正确 我希望我的导航在登录后在整个网站上显示我的用户名 我的观点包含 from Flask import g among other
  • Python - StatsModels、OLS 置信区间

    在 Statsmodels 中 我可以使用以下方法拟合我的模型 import statsmodels api as sm X np array 22000 13400 47600 7400 12000 32000 28000 31000 6
  • Spark KMeans 无法处理大数据吗?

    KMeans 有几个参数training http spark apache org docs latest api python pyspark mllib html highlight kmeans pyspark mllib clus
  • 使用 Tkinter 显示 numpy 数组中的图像

    我对 Python 缺乏经验 第一次使用 Tkinter 制作一个 UI 显示我的数字分类程序与 mnist 数据集的结果 当图像来自 numpy 数组而不是我的 PC 上的文件路径时 我有一个关于在 Tkinter 中显示图像的问题 我为
  • Python 函数可以从作用域之外赋予新属性吗?

    我不知道你可以这样做 def tom print tom s locals locals def dick z print z name z name z guest Harry print z guest z guest print di
  • 如何在Python中获取葡萄牙语字符?

    我正在研究葡萄牙语 角色看起来很奇怪 我怎样才能解决这个问题 代码 import feedparser import random Vou definir os feeds feeds conf feedurl http pplware s
  • 如何在ipywidget按钮中显示全文?

    我正在创建一个ipywidget带有一些文本的按钮 但按钮中未显示全文 我使用的代码如下 import ipywidgets as widgets from IPython display import display button wid
  • Python 的“zip”内置函数的 Ruby 等价物是什么?

    Ruby 是否有与 Python 内置函数等效的东西zip功能 如果不是 做同样事情的简洁方法是什么 一些背景信息 当我试图找到一种干净的方法来进行涉及两个数组的检查时 出现了这个问题 如果我有zip 我可以写这样的东西 zip a b a
  • 在Python中获取文件描述符的位置

    比如说 我有一个原始数字文件描述符 我需要根据它获取文件中的当前位置 import os psutil some code that works with file lp lib open path to file p psutil Pro
  • 使用 \r 并打印一些文本后如何清除控制台中的一行?

    对于我当前的项目 有一些代码很慢并且我无法使其更快 为了获得一些关于已完成 必须完成多少的反馈 我创建了一个进度片段 您可以在下面看到 当你看到最后一行时 sys stdout write r100 80 n I use 80覆盖最终剩余的
  • 将图像分割成多个网格

    我使用下面的代码将图像分割成网格的 20 个相等的部分 import cv2 im cv2 imread apple jpg im cv2 resize im 1000 500 imgwidth im shape 0 imgheight i
  • 如何在seaborn displot中使用hist_kws

    我想在同一图中用不同的颜色绘制直方图和 kde 线 我想为直方图设置绿色 为 kde 线设置蓝色 我设法弄清楚使用 line kws 来更改 kde 线条颜色 但 hist kws 不适用于显示 我尝试过使用 histplot 但我无法为
  • 使用 Python 绘制 2D 核密度估计

    I would like to plot a 2D kernel density estimation I find the seaborn package very useful here However after searching
  • Rocket UniData/UniVerse:ODBC 无法分配足够的内存

    每当我尝试使用pyodbc连接到 Rocket UniData UniVerse 数据时我不断遇到错误 pyodbc Error 00000 00000 Rocket U2 U2ODBC 0302810 Unable to allocate
  • Python 类继承 - 诡异的动作

    我观察到类继承有一个奇怪的效果 对于我正在处理的项目 我正在创建一个类来充当另一个模块的类的包装器 我正在使用第 3 方 aeidon 模块 用于操作字幕文件 但问题可能不太具体 以下是您通常如何使用该模块 project aeidon P

随机推荐

  • 嵌套多级类别的更动态方式

    我正在尝试创建一种方法来检索和显示无数的嵌套类别 现在我可以像这样选择它们 未经测试 不重要 resulttable1 mysql query SELECT name id FROM categories WHERE childof 0 w
  • 在 TabBar 控制的 iOS 应用程序中的第二个选项卡中进行交互时,将 RemoteControlEvents 接收到第一个选项卡

    我正在开发一个带有标签栏控制器的 iOS 应用程序 在第一个选项卡中 我放置了一个 AVQueuePlayer 实例来开始从网络播放音乐 我完成了所有编码以允许通过远程控制事件播放和暂停事件 但只有当我停留在第一个选项卡中时 我才能接收远程
  • 如何将样式应用于嵌入的 SVG?

    当使用 SVG 直接包含在文档中时
  • Mac App开发:“***.app”已损坏且无法打开

    我有一个 Mac 应用程序 我已经有一段时间没有碰过它了 现在 自 macOS Catalina 以来 与 Mac App Store 集成运行应用程序的情况似乎发生了变化 https stackoverflow com q 5867337
  • 如何在 PHP 中 GET 或 POST 多部分数据请求

    我正在从 iOS 发送多部分请求以在服务器上上传图像或文档文件 我的要求就像 UIImage im UIImage imageNamed 57X57 png NSData imageData UIImageJPEGRepresentatio
  • 需要使用范围进行嵌套连接的 ActiveRelation

    我是 Rails 新手 玩得很开心 查询 API 给了我 有些麻烦 我一直在快速地缩放并做很多事情 但这是我第一次花几个小时试图弄清楚 它不像我以前使用过的任何东西 常规 SQL 或 Hibernate 管他呢 我的模型非常简单 私人消息有
  • 是否有用于标头(h1、h2、h3、h4、h5 或 h6)的 jQuery 选择器?

    jQuery 中似乎没有办法判断一个节点是否是标题 即 h1 h2 h3 h4 h5 或 h6 我想写一些类似的东西 hNode node closest h if hNode length gt 0 hNode css padding t
  • random_number() 如何并行工作?

    如何random number 与 OpenMP 并行工作吗 如果我在没有并行化的情况下运行程序 我总是得到相同的结果 但是通过并行化 我每次都会得到不同 但相似 的结果 不保证线程安全或线程性能random number一般来说 Fort
  • 在hadoop java中解析json输入

    我的输入数据位于 hdfs 中 我只是想进行字数统计 但有细微的差别 数据为json格式 所以每行数据为 author foo text hello author foo123 text hello world author foo234
  • 通过链接 2 列设置 R data.table 行顺序

    我试图弄清楚如何根据 2 列的链接对 R 数据表进行排序 这是我的示例数据表 dt lt data table id c A A A A A col1 c 7521 0 7915 5222 5703 col2 c 7907 5703 800
  • CommaIde 上未声明子例程“say”

    我用 CommaIde 打开了这个简单的脚本 usr bin env perl6 my str foobar say str IDE 突出显示单词 say 并显示错误 子程序说未定义 但是 如果我执行该脚本 它运行正常 其他核心方法 如 p
  • 在python中将二进制整数写入文件

    如何在 Python 3 中将整数写入二进制文件 例如 我想将 6277101735386680763835789423176059013767194773182842284081 以恰好 24 个字节的二进制格式写入文件 无符号 我只会使
  • 如果调用 fclose(0),这会关闭标准输入吗?

    如果调用 fclose 0 这会关闭标准输入吗 我问这个问题的原因是由于某种原因 stdin 在我的应用程序中被关闭 我不明白为什么 我检查了 fclose stdin 但这不在应用程序中 所以我想知道 fclose 0 是否会导致未定义的
  • 仍然对 Objective-C 的动态绑定感到困惑

    这个问题来自我刚刚添加到答案中的评论这个问题 https stackoverflow com questions 6608551 question about dynamic binding objective c and methods
  • 看起来我正在实例化这个 SpeechAPI 接口。这怎么可能?

    我在我的项目中使用 Microsoft 文本到文本语音功能 但我对此有一个问题 实际上不是直接的问题 所以 通常程序员在创建接口时 他们会将 I 作为接口名称的前缀 如 IReadable IEnumerator 等 但我遇到过一些让我震惊
  • Unity 2D:区域颜色反转效果

    我正在尝试创建一个 GameObejct 如果处于活动状态 则会反转其后面任何内容的颜色 理想情况下 当该游戏对象出现 变为活动状态时 它会从其中心点扩展到一定大小的半径 因此 想象一个圆 其比例在 1 或 2 秒内逐渐从 x 0 和 y
  • 如何排除模板文字类型的子字符串?

    我想从模板文字类型 自 TypeScript 4 1 起可用 中排除一些子字符串 但我不知道是否可能 Example 我可以定义一个类型说 这个字符串是一个包含 2 个或更多元素的元组 即类似的东西 string number 使用这个文字
  • Symfony 2 - 在 ROLE_USER 下添加用户角色

    我正在尝试在 Symfony 2 中的默认 USER ROLE 下创建一个新角色 该角色对某些功能的写访问权限有限 我正在使用 FOSUserBundle 到目前为止 我已经编写了以下安全设置 但我的 ROLE DEMO 用户仍然获得 RO
  • Rails 时区问题

    这是我的控制台 irb main 048 0 gt Time now gt 2011 04 13 00 51 50 0200
  • Python ctypes 和动态链接

    我正在用 C 编写一些库 其中包含我想通过 ctypes 从 Python 调用的函数 我已经在另一个库中成功完成了此操作 但是该库只有非常普通的依赖项 即fstream math malloc stdio stdlib 我正在开发的另一个