Можно ли включить автоматическое включение CMake + SWIG + Python из заголовков C ++? - PullRequest
0 голосов
/ 17 декабря 2018

Я только что начал изучать модули 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> не может быть найден.)

1 Ответ

0 голосов
/ 17 декабря 2018

std_string.i содержит карты типов, необходимые для понимания SWIG std::string.Вы должны включить его в файл .i, если вы переносите функции, использующие std::string, или SWIG просто создаст непрозрачные оболочки для объектов, которые он не понимает (например, Swig Object of type 'std::string *').

Обратите внимание, что выобычно не не хотят использовать -includeall или -importall.Как правило, вы не хотите создавать обертки SWIG для каждого включенного класса и функции, рекурсивно.

...