0

这与在 swig 编译期间包含 Header 相关:

接口文件(比如 foo.i)有一些包括,例如:

%模块绑定

%{

#include "foo.h"

%}

文件 foo.h 存在于我正在构建 swig 源的当前目录中,如下所示:swig -perl5 foo.i (这里它从当前目录中选择 foo.h)

如果我想从其他目录而不是当前目录中包含 foo.h,我尝试这样的操作: swig -perl5 -I/DIR_PATH foo.i (这里它也从当前目录中选择 foo.h)

即使尝试这种方法, foo.h 也会再次从当前目录中选择,而不是从指定的 DIR_PATH 中选择。请提出一种方法来忽略当前目录中存在的 foo.h,并强制它选择指定 DIR_PATH 中的 foo.h。

我检查了相关帖子(在 SWIG 编译中:在接口中的头文件中无法解析其他头文件。),但它没有回答我的问题。

4

2 回答 2

0

%{...%} 之间的任何内容都会被逐字复制到 SWIG 生成的 .c 文件中。因此,这不是 SWIG 问题,而是编译器问题。确保向编译器命令提供 -I 以便它可以找到包含的头文件:

swig -perl5 foo.i
gcc -I /path/to/headers -c bindings.c

第一行生成 bindings.c,它将包含您在 foo.i 的 %{...%} 块中定义的任何代码。

于 2013-10-23T22:28:02.727 回答
0

使用#include <foo.h>. 大多数编译器使用""先搜索当前目录,然后搜索包含路径,然后<>只搜索包含路径。

于 2013-11-01T16:24:00.377 回答