用python在mac import中创建dylib

2024-04-25 04:51:07 发布

您现在位置:Python中文网/ 问答频道 /正文

嗨,我知道如何用visual studio 2012和c在windows中制作库(dll)++ 在python中使用ctypes导入非常有效

这里有个小例子

在库.cpp在

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

自由高度

^{pr2}$

在测试.py在

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

我尝试用Xcode4.4版本在mac上运行相同的代码 当我在xcode中构建时,我得到了一个敌对的信息

__declspec attribute 'dllexport' is not supported

什么时候进口库.dylib在python中我得到了错误

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

我做错了什么? 有人能写一个简单的代码吗,我如何在mac中用xcode使dylib正确地导入python2.6.4中的cypes

或者

are是在两个系统中导入python库的更好方法 为了麦克赢?在

basic我喜欢用visualstudio2012在windows中编写代码 然后在mac中用xcode进行简单的编译器,在python中导入


Tags: 代码windowsmacnotctypesintxcodedll
1条回答
网友
1楼 · 发布于 2024-04-25 04:51:07

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

再做一次LoadLibrary可能会也可能不会重新加载库,而且无法强制它这样做。在

ctypes中也无法卸载和重新加载库。主要原因是在所有平台上都没有安全的方法,事实上,在10.4之前,OSX本身就是这样一个平台。(而且Python仍然有current source code in the tree来支持ctypes中的10.4os X之前的版本)但是,尝试在每个平台上以安全的方式执行任务的模型并不简单。所以,ctypes没有尝试。在

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

简而言之,在大多数现代POSIX平台上(包括osx10.5+),它是_ctypes.dlclose(mydll._handle),而在Win32上,它是_ctypes.FreeLibrary(mydll._handle)。在这两种情况下,如果您再次使用mydll(或从中引用的任何函数或值),您应该祈祷segfault。您也可以在退出时退出。在Windows上,当你请求它的时候,它可能实际上并没有释放库,在某些情况下,你必须先询问库是否准备好卸载,然后才能这样做,而且存在线程复杂性,而且……好吧,只要阅读MSDN上的^{}文档,当然还有你关心的每个POSIX系统上^{}的手册页。在

一般来说,只启动一个新的解释器进程会更好。在

相关问题 更多 >