簡體   English   中英

加載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復制到我的桌面並啟動Python解釋器。 但是當我想加載它時,解釋器就會退出!

C:\Users\niklas\Desktop>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:\Users\niklas\Desktop>

但是,加載任何其他庫工作,或者如果找不到庫則會出錯。
你能告訴我這里我做錯了什么嗎?

使用Cygwin g ++ 3.4.4

作為一個完整的猜測,我會說Cygwin構建的DLL與MSVC構建的解釋器不兼容,要么是因為ABI問題,要么是因為你不能使用兩個不同的libc。 用MinGW構建DLL。

檢查objdump -p TestDll.dll | grep dll objdump -p TestDll.dll | grep dll看看你是否鏈接了“cygwin1.dll”和nm TestDll.dll | grep 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選項。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM