2011-07-01 50 views
2

我正在使用一個API,它是作爲一個dll/so文件分發的,我需要動態鏈接到我的python程序。爲了實現這一點,我想使用Cython。Cython:動態鏈接一個dll/so

我以前能夠靜態鏈接到dll。這個效果很好,除了API有四種不同的風格,理論上無限更多,用戶應該能夠用他們想要的任何名稱(有點像插件系統)編譯它們。因此,我不能只製作一個靜態鏈接到一個庫的so/pxd文件,或者甚至鏈接它們的選擇。

我需要的是能夠將so/dll名稱傳遞到Cython代碼並讓它「導入」它。我知道這可以通過ctypes.cdll.LoadLibrary通過ctypes完成,但是在Cython中可能會出現這種情況嗎?我將不得不使用ctypes來做到這一點?

回答

2

我假設你正在討論在這裏寫C模塊。如果是的話,你可以。我不知道Windows的等價物是什麼,但是在Linux中你可以使用dlopen和朋友。有一個手冊頁和幾個網站記錄它。試試這個鏈接「http://linux.die.net/man/3/dlopen」它爲您提供了一個接近頁面底部的好例子。這和ctypes做的事情是一樣的,實際上我認爲這可能是ctypes使用的。