Boost Python импорт не выполняется, символ обернутого класса не определен - PullRequest
0 голосов
/ 27 марта 2019

У меня проблема с использованием Boost Python в моем текущем проекте.Когда я пытаюсь импортировать сгенерированный модуль в python 3.6, появляется следующая ошибка: ImportError: PythonTrackWrapper.so: неопределенный символ: _ZN18PythonTrackWrapperD1Ev, где PythonTrackWrapper - это класс, который я хочу обернуть для использования в Python.Я не могу отследить ошибку и буду признателен за вашу помощь!

PythonTrackWrapper.cpp:

#include <Python.h>
#include <boost/python.hpp>
#include <boost/tuple/tuple.hpp>

using namespace boost::python;

PythonTrackWrapper::PythonTrackWrapper(std::vector<boost::tuple<double, double>>& left, std::vector<boost::tuple<double, double>>& right, boost::tuple<double, double>& currentPose){

    std::vector<double> X, Y;

    produceTrack(left, right, currentPose, X, Y);

    track = Track(X, Y);

}

BOOST_PYTHON_MODULE(PythonTrackWrapper)
{

    class_<PythonTrackWrapper>("PythonTrackWrapper", init<std::vector<boost::tuple<double, double>>&, std::vector<boost::tuple<double, double>>&, boost::tuple<double, double>&>())
            .def("get_progress_on_track", &PythonTrackWrapper::getProgressOntrack);
}

CMakeLists.txt

cmake_minimum_required(VERSION 3.5)
project(Spline)

set(CMAKE_CXX_STANDARD 17)
find_package(Boost COMPONENTS python3 REQUIRED)

find_package(Python3 3.6 REQUIRED)

...

add_library(PythonTrackWrapper SHARED PythonTrackWrapper.cpp)
set_target_properties(PythonTrackWrapper PROPERTIES SUFFIX .so)
set_target_properties(PythonTrackWrapper PROPERTIES PREFIX "")

target_link_libraries(PythonTrackWrapper Spline boost_python3 ${Boost_LIBRARIES} ${Python3_LIBRARIES})

Это код, который я считаюСкорее всего, содержат ошибки, относящиеся к проблеме, если вы думаете, что причина может быть в другом месте, я был бы рад опубликовать остальные.

Большое спасибо!

1 Ответ

0 голосов
/ 27 марта 2019

Я обнаружил свою ошибку, проблема заключалась в том, что в моем файле .h был определен деструктор, который я тогда, однако, не реализовал.Надеюсь, что это помогает кому-то.

...