这与在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。
我检查了相关帖子(In SWIG compilation : In header file in interface is unable to resolve other header files.),但它没有回答我的问题。
答案 0 :(得分:0)
%{...%}之间的任何内容都会逐字复制到SWIG生成的.c文件中。因此,这不是SWIG问题,而是编译器问题。确保为编译器命令提供-I,以便它可以找到包含的头文件:
swig -perl5 foo.i
gcc -I /path/to/headers -c bindings.c
第一行生成bindings.c,它将包含您在foo.i中的%{...%}块中定义的任何代码。
答案 1 :(得分:0)
使用#include <foo.h>
。大多数编译器使用""
来搜索当前目录,然后搜索包含路径,并使用<>
来搜索包含路径。