`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,

Похоже, что он может быть сгенерирован автоматически (по крайней мере, я на это надеюсь, потому что, если вы пишете функции с таким именем, вам, вероятно, следует переосмыслить свою схему именования), но в любом случае, вам нужно сослаться в файле, который содержит определение этой функции.

Другие вопросы по тегам