我正在通過創建c擴展名將一些python代碼嵌入到kdb數據庫中。爲此,我需要將我的代碼編譯到共享庫中,並在我的kdb q腳本中加載共享庫。我遇到的這個問題是當我嘗試導入numpy模塊時。我得到一個錯誤,說PyType_GenericNew是未定義的。這發生在運行時間而不是編譯時間。使用python c api獲取共享對象的完整路徑
我正在構建的共享庫與libpython3.5m.so鏈接,但我想這不會導出全局符號。當我做了一個在main()中導入numpy的測試可執行文件時,它運行良好。我可以通過調用dlopen("libpython3.5m.so", RTLD_NOW | RTLD_GLOBAL)
來解決共享庫中的這個問題。但我不太喜歡這個解決方案,因爲它不是很健壯。說例如我改變了我的編譯選項,喜歡反對libpython3.4m。然後我需要更改源代碼,所以dlopen打開libpython3.4m。
當我使用-lpython3.5m選項鍊接全局導出所有符號時,有沒有辦法告訴gcc?這樣我可以跳過dlopen。
否則是否有什麼可以告訴我python共享庫的路徑,我目前正在使用的python c api?即像dlopen(Py_GetLibraryPath(), RTLD_NOW | RTLD_GLOBAL)
'readelf -d youlib.so'顯示依賴於libpython3.5m嗎?鏈接器可能已將其刪除。 – yugr
它具有依賴性。 – chasep255