`unique_ptr`s вызывает 'неопределенный символ' в расширении Python
У меня есть проект C++, который использует несколько функций C++14, включая std::make_unique.
Проект компилируется и запускается нормально, и некоторое время он работал, но сейчас я пытаюсь добавить интерфейс 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
но когда я импортирую модуль в python, я получаю следующую ошибку:
my_module.so: undefined symbol: _Z15build_331792650RSt10unique_ptrIN6grelka5SlaveESt14default_deleteIS1_EE
Нужно ли где-нибудь делать дополнительный шаг связывания?
1 ответ
Подводя итоги обсуждения в комментариях:
Это ошибка компоновщика, означающая, что в вашем коде объявлена какая-то функция или объект, но вы не ссылаетесь на какой-либо объектный файл, который его определяет. Если вы используете инструмент для удаления имени, как c++filt
или demangler.com, вы видите, что отсутствующий символ не является частью unique_ptr
сам, но функция build_331792650
,
Похоже, что он может быть сгенерирован автоматически (по крайней мере, я на это надеюсь, потому что, если вы пишете функции с таким именем, вам, вероятно, следует переосмыслить свою схему именования), но в любом случае, вам нужно сослаться в файле, который содержит определение этой функции.