加载DLL时Python解释器退出
Python interpreter exits when loading DLL
我想测试用ctypes包装一个dll。我已经编写了以下测试代码,并使用code::Blocks和Cygwin将其编译为dll。
#define DLL_EXPORT extern "C" __declspec(dllexport)
DLL_EXPORT int sum(int a, int b) {
return a + b;
}
注意:这是整个代码。
现在,我将TestDll.dll
复制到我的Desktop并启动Python解释器。但是当我想加载它时,解释器就退出了!
C:UsersniklasDesktop>python
Python 2.7.2 (default, Jun 12 2011, 15:08:59) [MSC v.1500 32 bit (Intel)] on win 32
Type "help", "copyright", "credits" or "license" for more information.
>>> import ctypes
>>> dll = ctypes.WinDLL('TestDll')
C:UsersniklasDesktop>
但是,加载任何其他库都可以工作,或者如果无法找到库则给出错误。
你能告诉我我哪里做错了吗?
使用Cygwin g++ 3.4.4
检查objdump -p TestDll.dll | grep dll
,看看你是否已经链接在"cygwin1.dll"和nm TestDll.dll | grep Dll
,看看你是否有一个DllMain
。下面的命令应该可以正确地构建DLL:
g++ testdll.c -mno-cygwin -shared -o TestDll.dll
此外,您需要使用CDLL作为cdecl调用约定,而不是WinDLL:
>>> import ctypes
>>> dll = ctypes.CDLL('TestDll')
>>> dll.sum(4, 5)
9
编辑:我从Cygwin存储库编译i686-w64-mingw32-g++.exe
(4.5.3),但我过去使用默认的Cygwin gcc没有问题,给定-mno-cygwin选项。
作为一个完整的猜测,我会说cygwin构建的DLL与msvc构建的解释器不兼容,要么是因为ABI问题,要么只是因为您不能使用两个不同的libcs。用MinGW来构建DLL
相关文章:
- 为什么"do while"循环不断退出,即使条件计算结果为 false?
- 创建LinkedList退出,返回代码为-11(SIGSEGV)
- 当我在main中声明了我的2d数组时,为什么我的程序会退出
- 如何让LLDB在成功时退出,在失败时等待
- C++控制台应用程序阻止退出
- 程序在执行程序的其余部分之前退出
- 构造函数在退出函数时无法初始化一个参数
- 为什么异常不退出程序?
- 我不断收到 [错误] ID 返回 1 退出状态错误,但看不到问题所在
- 退出简单while循环时出现问题
- 使用vscode调试时,GDB意外退出
- pclose() 不会给我进程退出代码
- 为什么系统函数总是在C++中返回已转移的退出状态?
- C++从另一个函数退出函数
- C++ 中的编译错误:未定义对"主"的引用 collect2:错误:ld 返回 1 个退出状态
- C++逗号分隔的输入数组代码过早退出
- Netbeans 10:错误:链接器命令失败,退出代码为 1(使用 -v 查看调用)
- 为什么 C++ 中的以下结构声明会导致退出 127?
- 编译问题:在函数"_start"中:未定义对"主"的引用 collect2:错误:ld 返回 1 个退出状态
- 加载DLL时Python解释器退出