gpt4 book ai didi

python - 是否可以从 C++ header 中自动包含 CMake + SWIG + Python?

转载 作者:行者123 更新时间:2023-11-28 04:27:56 24 4
gpt4 key购买 nike

我刚刚开始使用 SWIG 和 CMake 学习 Python 的 C++ 模块。

查看“UseSWIG”文档,似乎可以从我的简单“hello world”测试中让 CMake 自动包含例如 。但是,到目前为止,我一直无法在这方面取得成功而不必添加 %include std_string.i到我的'hello.i' 文件。

将以下(我只是从 obs-python 的 github 上截取) 添加到我的 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.

我想知道是否有人愿意提供一个简短的例子来说明可能缺少的内容。

或者不管 <string> 是否真的有必要在我的 'hello.i' 中包含 'std_string.i'包含在我的 C++ header 中?

(没有这两个中的任何一个,make 会像预期的那样声明找不到 <string>。)

最佳答案

std_string.i 包含 SWIG 理解 std::string 所需的类型映射。如果包装使用 std::string 的函数,则必须将其包含在 .i 文件中,否则 SWIG 只会为其不理解的对象生成不透明的包装器(例如 'std::string *' 类型的 Swig 对象)。

请注意,您通常不想使用-includeall-importall。您通常不希望递归地为包含的每个类和函数生成 SWIG 包装器。

关于python - 是否可以从 C++ header 中自动包含 CMake + SWIG + Python?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53816015/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com