Я только что начал изучать модули C ++ для Python с использованием SWIG и CMake.
Глядя на документацию по UseSWIG, можно сделать так, чтобы CMake автоматически включал, например, измой простой тест "привет мир".Но я до сих пор не смог добиться успеха в этом , не добавив %include std_string.i
в мой 'hello.i' файл.
С помощьюследующий (который я просто оторвал от github obs-python ) добавлен в мой CMakeLists.txt:
SET_SOURCE_FILES_PROPERTIES(hello.i PROPERTIES SWIG_FLAGS "-modern")
SET_SOURCE_FILES_PROPERTIES(hello.i PROPERTIES SWIG_FLAGS "-builtin")
SET_SOURCE_FILES_PROPERTIES(hello.i PROPERTIES SWIG_FLAGS "-modernargs")
SET_SOURCE_FILES_PROPERTIES(hello.i PROPERTIES SWIG_FLAGS "-includeall")
SET_SOURCE_FILES_PROPERTIES(hello.i PROPERTIES SWIG_FLAGS "-importall")
SET_SOURCE_FILES_PROPERTIES(hello.i PROPERTIES SWIG_FLAGS "-py3")
После этого библиотека будет нормально работатьбез добавления %include std_string.i
.Тем не менее, попытка использовать встроенный модуль в python приведет к:
<Swig Object of type 'std::string *' at 0x7fb743896270>
swig/python detected a memory leak of type 'std::string *', no destructor found.
Интересно, кто-нибудь захочет привести краткий пример того, что может отсутствовать?
Или действительно необходимо включить std_string.i в мой hello.i независимо от того, включен ли <string>
в мой заголовок c ++?
(без одного из этих двух, сделайтекак ожидается, сообщит, что <string>
не может быть найден.)