SWIG 不支持 include_next GNU 指令

Posted

技术标签:

【中文标题】SWIG 不支持 include_next GNU 指令【英文标题】:SWIG does not support include_next GNU directive 【发布时间】:2020-03-26 15:15:29 【问题描述】:

我正在尝试使用 swig 为用 C++ 编写的库生成 python 绑定。

当我在 Debian GNU/Linux 10 上运行时

swig -I/usr/include \
    -I/usr/include/c++/8 \
    -I/usr/include/c++/8/tr1 \
    -I/usr/include/linux \
    -I/usr/include/x86_64-linux-gnu \
    -I/usr/include/x86_64-linux-gnu/c++/8 \
    -I/usr/share/swig3.0/python \
    -I$(KALDI_ROOT)/tools/openfst/src/include \
    -I$(KALDI_ROOT)/src \
    -includeall -c++ -python ConstArpaLmRescoring.i

输出是

/usr/include/c++/8/cstdlib:75: Error: Unknown SWIG preprocessor directive: include_next (if this is a block of target language code, delimit it with % and %)
/usr/include/c++/8/bits/std_abs.h:38: Error: Unknown SWIG preprocessor directive: include_next (if this is a block of target language code, delimit it with % and %)
/usr/include/c++/8/bits/c++0x_warning.h:32: Error: CPP #error "This file requires compiler and library support \
for the ISO C++ 2011 standard. This support must be enabled \
with the -std=c++11 or -std=gnu++11 compiler options.". Use the -cpperraswarn option to continue swig processing.
/usr/include/c++/8/cmath:45: Error: Unknown SWIG preprocessor directive: include_next (if this is a block of target language code, delimit it with % and %)
make: *** [Makefile:38: all] Error 1

包含include_next指令的文件是cmathcomplex.hcstdlibstdlib.htgmath.htgmath.hfenv.hmath.hbits/std_abs.h

你推荐什么解决方案来解决这个问题?

【问题讨论】:

【参考方案1】:

删除-includeall。这试图为每个包含的头文件中的每个函数递归地制作 swig 包装器。您通常只需要自定义 API 标头中的函数。

【讨论】:

以上是关于SWIG 不支持 include_next GNU 指令的主要内容,如果未能解决你的问题,请参考以下文章

swig/python:对象不支持索引

SWIG 3 中文手册——8. 预处理

SWIG:对 Java 的 wchar_t 支持

[swig-JavaScript] 是不是支持 std::vector<std::string>* 作为输出?

编译错误:“stdint.h:没有这样的文件或目录”

xmake v2.5.8 发布,新增 Pascal/Swig 程序和 Lua53 运行时支持