我有一個用C++編寫的dll,我想要導出到Python以運行迴歸和單元測試(它只是更容易維護並使用Python運行迴歸)。 爲此,我想使用Boost.Python來導出dll的主API,以便它可以在Python中使用。 我的組件如下所示:提升Python可移植性問題
- MyLibrary.dll //主API C++庫
- MyLibrary.pyd //僅含有
BOOST_PYTHON_MODULE
導出定義的薄dll項目(取決於MyLibrary.dll) - ... //其它C++ DLL文件MyLibrary.dll取決於
我遇到了一些麻煩MyLibrary.pyd鏈接,而是通過挖掘問題後位(例如here)我意識到我必須重新建立提升而點球ng b2.exe
到我的特定Python版本。之後,我能夠從python導入並運行我的庫(在我的機器上只有)。技術數據:我使用boost 1.51,Windows 7 x64上的Python 3.23和MSVC-10.0(我自己的項目是從VS2010構建的)構建庫。我用來鏈接boost的變體是共享庫,64位地址模型,相應地用我自己的版本發佈。
問題是,當我嘗試導入庫中另一臺機器上(內置在我的機器上),蟒蛇抱怨:
ImportError: DLL load failed: The specified procedure could not be found.
在這引出下面的問題行import MyLibrary
:
- MyLibrary.pyd是我在我的機器上構建的「python-portable」嗎?意思是說,除了3.23(我用來在我的機器上構建boost.python的版本)之外,它還能在其他Python版本上工作嗎?
- MyLibrary.pyd的用戶是否必須用自己的python版本重新構建boost才能成功導入它?
- 到目前爲止,我們一直在使用由BoostPro提供的預先構建的boost安裝程序。如果我們只是決定在整個團隊中使用「正確」的Python版本(BoostPro鏈接的版本),我可以爲我的用戶節省建立提升的麻煩嗎?
您是否使用過Dependency Walker來調查MyLibrary.pyd的依賴關係? –
@JanneKarila:我對Dependency Walker不熟悉。你能擴展嗎? – eladidan
也許有一個depends.exe已經在你的Visual Studio中,否則請參閱http://www.dependencywalker.com/ –