gpt4 book ai didi

c++ - 在 mac 中创建 dylib 在 python 中导入

转载 作者:太空宇宙 更新时间:2023-11-04 11:45:59 29 4
gpt4 key购买 nike

您好,我知道如何使用 Visual Studio 2012 和 C++ 在 Windows 中制作库 (dll)并使用 ctypes 在 python 中导入效果很好

这里是小例子

库文件

#define DLLEXPORT extern "C" __declspec(dllexport)
DLLEXPORT int sum(int a,int b)
{
return (a+b);
}

库文件

int sum(int,int); 

测试.py

from ctypes import *
mydll=cdll.LoadLibrary('lib.dll')
print mydll.sum(2,2)

我尝试在 mac 中使用 xcode 4.4 版本运行相同的代码当我在 xcode 中构建时,我收到交战消息

__declspec attribute 'dllexport' is not supported

当在 python 中导入 lib.dylib 时出现错误

AttributeError: dlsym(0x101afba30, sum): symbol not found

我做错了什么?有人可以编写简单的代码吗我如何在 mac 中使用 xcode 正确地使用 python 2.6.4 中的 Ctypes 导入 dylib

这是在两个系统中导入 python 库的更好方法对于 mac 和赢?

基本我喜欢在 windows 中用 visual studio 2012 编写代码 make dll i然后在 mac 中使用 xcode 进行简单编译并在 python 中导入

最佳答案

您的问题是您已经将 dylib 加载到您的 Python 解释器中。只是重建它不会影响您加载到内存中的内容。

只是执行另一个 LoadLibrary 可能会或可能不会重新加载库,并且没有办法强制它这样做。

也没有办法在 ctypes 中卸载和重新加载库。主要原因是没有安全的方法可以在所有平台上这样做——事实上,在 10.4 之前,OS X 本身就是这样一个平台。 (并且 Python 仍然有 current source code in the tree 以在 ctypes 中支持 10.4 之前的 OS X。)而且,试图想出一个在每个平台上都以安全方式做事的模型并不是一件容易的事.所以,ctypes 不会尝试。

如果你确实需要这样做,ctypes 下的_ctypes 模块通常将必要的函数导出到Python 中。如果您知道您平台的名称,您可以使用 help(_ctypes) 或查看 the source 找到它们。 .

简而言之,在大多数现代 POSIX 平台(包括 OS X 10.5+)上,它是 _ctypes.dlclose(mydll._handle),而在 Win32 上,它是 _ctypes.FreeLibrary(mydll._handle) 。在任何一种情况下,如果您再次使用 mydll(或您从中引用的任何函数或值),您应该为段错误祈祷。您也可能在退出时出现段错误。在 Windows 上,当您要求它释放库时,它实际上可能不会释放库,在某些情况下,您必须先询问库是否准备好卸载,然后才能执行此操作,并且存在线程复杂性,并且……好吧,请阅读FreeLibrary MSDN 上的文档,当然还有 dlclose(3) 的联机帮助页在您关心的每个 POSIX 系统上。

一般来说,启动一个新的解释器进程是一个更好的主意。

关于c++ - 在 mac 中创建 dylib 在 python 中导入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19823502/

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