我有一个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)有关。你有没有更新环境变量,以便它可以找到你的库? –