2011-05-11 37 views
1

我正在冒險進入使用pybindgen爲Python創建C/C++綁定的領域。我已經按照「建設它(GCC指令)」爲示例文件創建綁定下所列的步驟:應放置共享對象文件的位置?

http://packages.python.org/PyBindGen/tutorial.html#a-simple-example

運行make產生.so文件。如果我明白.so文件如何工作,我應該能夠將共享對象中的類放入Python中。但是,我不確定在哪裏放置文件以及如何讓Python知道它在哪裏。另外,原始的c/C++源文件是否需要附帶.so文件?

到目前爲止,我已經嘗試將文件放在/ usr/local/lib中,並將該路徑添加到.bash_profile的DYLD_LIBRARY_PATH中。當我嘗試從Python中的interpeter中導入模塊時,會拋出一個錯誤,指出無法找到該模塊。

所以,我的問題是:生成的.so文件需要做些什麼才能被Python程序使用?

回答

3

Python在其搜索python的相同目錄中查找.so模塊。所以你必須像普通的python模塊那樣安裝它,默認情況下是python的sys.path/usr/share/python/site-lib或類似—它會依賴於分佈),或者將目錄添加到PYTHONPATH環境變量中。

這是蟒蛇加載模塊使用dlopen,而不是動態鏈接器,所以LD_LIBRARY_PATH(注意,沒有DY)不會幫助你。

+0

感謝您的輸入。我已將.so文件放入/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages。這當然是在路徑上,因爲我在同一目錄中使用其他庫。但是,Python仍然在拋出一個錯誤,指出不存在這樣的模塊。也許這個.so文件有問題嗎?至於關於LD_LIBRARY_PATH的差異,我在Mac上,我在這裏閱讀http://www.agavemountain.com/2008/03/ldlibrarypath-in-mac-os-x.html,在Mac上,env變量是稱爲DYLD。 – JeremyFromEarth 2011-05-11 07:34:30

0

與所有其他Python模塊相同。它必須位於sys.path中的某個位置。