我有一個C++項目,它使用了包括std :: make_unique在內的一些C++ 14功能。`unique_ptr`在Python擴展中導致'未定義的符號'
該項目編譯和運行良好,並做了一段時間,但是,現在我想添加一個python界面,我有一些麻煩。
在我的Python擴展我試圖聲明我的C++類作爲唯一使用:
#include <memory>
...
typedef struct {
PyObject_HEAD
std::unique_ptr<MyClass> my_instance;
} PyMyClass;
...
self->my_instance = std::make_unique<MyClass>();
在我setup.py
文件我已經包括-std=c++14
作爲一個編譯器選項。
它建立罰款python setup.py develop/install
但是當我導入模塊進入蟒蛇,我得到以下錯誤:
my_module.so: undefined symbol: _Z15build_331792650RSt10unique_ptrIN6grelka5SlaveESt14default_deleteIS1_EE
我需要的地方做一個額外的鏈接步驟?
您能否給出與您的簡化示例相關的錯誤消息,而不是實際代碼中的錯誤消息?在這種情況下,我想你可能已經簡化了它,直到問題沒有出現。這就是爲什麼人們經常要求[完整和可驗證的示例](https://stackoverflow.com/help/mcve),以便他們能夠重現錯誤並進行調查。無論如何,它所抱怨的符號是'build_331792650(std :: unique_ptr>&)'(從'C++ filt'程序中獲得);這對你來說意味着什麼? –
這是一個有用的[工具](https://demangler.com/)來在線取消該符號。是的,因爲@丹尼爾提到提供一個[MCVE],請重現該錯誤。 – user0042
由於它編譯和鏈接正常,它最有可能與python在運行時如何搜索動態庫(.so)有關。你有沒有更新環境變量,以便它可以找到你的庫? –