作者swampni ()
看板C_and_CPP
標題[問題] 編譯DLL
時間Tue Oct 16 00:49:08 2018
開發平台(Platform): (Ex: Win10, Linux, ...) Win10
編譯器(Ex: GCC, clang, VC++...)+目標環境(跟開發平台不同的話需列出) GCC & vc++
額外使用到的函數庫(Library Used): (Ex: OpenGL, ...) eigen
問題(Question):
不知道在這個版問適不適當
我的目標是寫c++編譯成dll丟到python裡面去加速python的一些運算
但我目前遇到的問題是:
我只能用mingw的++編譯出32bits的DLL
沒有辦法用mingw64的g++編譯出64bits的DLL
64bits的編出來丟到python裡面就會報[winError 193] %1 不是有效的win32應用程式
所以後來我就載了visual studio 2017然後用vcvarsall.bat amd64
然後用cl編譯我的dll
雖然這樣就成功了,但是比起用g++的慢非常多,大概是10倍左右
所以想請問各位大大我可能做錯的地方在哪裡?
附上我編譯用的參數
g++: g++ -c -I.\eigen -O2 xxx.cpp
g++ -o xxx.dll xxx.o
cl:cl /LD /EHsc -I .\eigen /O2 "xxx.cpp"
補充說明(Supplement):
其實沒怎麼寫過c++
對mingw甚麼的其實也都不太懂
所以如果這是一個很蠢的問題還請各位海涵>_<
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 180.176.50.59
※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1539622151.A.860.html
→ Lipraxde: 不是有效的win32應用程式?那你給他64的幹啥10/16 01:10
因為我查到stackoverflow這篇
https://stackoverflow.com/questions/19849077/error-loading-dll-in-python-not-a-v
alid-win32-application
→ uranusjr: 你 Python 那邊是怎麼用這個 DLL 的?在大多數情況是不10/16 07:58
→ uranusjr: 能把 MinGW binary 餵給 CPython, ABI 不一樣10/16 08:00
我在python那邊用的是numpy.ctypeslib.load_library
餵DLL給python應該是可行的,因為32bits的版本是可以運行的
後來我也試了用TDM-GCC64
就會報[WinError 1114]動態連結程式庫(DLL)初始化例行程序失敗。
查了一陣子好像也不太知道有甚麼解決辦法QQ
→ Lipraxde: 你的 python 是32還64?10/16 22:30
可以運行的是32的 2.7.11
但64的3.6就不行
我好像發現原因了
好像是我環境變數沒改到讓我沒有用到正確的g++或python去執行QQ
我真是白癡
也謝謝大家的幫助
※ 編輯: swampni (180.176.50.59), 10/17/2018 22:06:16