0

これは、swig のコンパイル中にヘッダーを含めることに関連しています。

インターフェイスファイル(たとえばfoo.i)には、次のようなものがあります。

%module バインディング

%{

#include "foo.h"

%}

swig -perl5 foo.i (ここでは、現在のディレクトリから foo.h を選択します)

現在のディレクトリではなく、他のディレクトリから foo.h をインクルードしたい場合は、次のようにします: swig -perl5 -I/DIR_PATH foo.i (ここでも、現在のディレクトリから foo.h を選択します)

このアプローチを試みても、指定された DIR_PATH からではなく、現在のディレクトリから foo.h が再び選択されます。現在のディレクトリに存在する foo.h を無視し、指定された DIR_PATH の foo.h を強制的に選択する方法を提案してください。

関連する投稿 ( In SWIG compilation : In header file in interface is cannot be resolve other header files. ) を確認しましたが、私の質問には答えません。

4

2 に答える 2

0

使用して#include <foo.h>ください。ほとんどのコンパイラは""、現在のディレクトリを検索してからインクルード パス<>を検索し、インクルード パスのみを検索するために使用します。

于 2013-11-01T16:24:00.377 に答える
0

%{...%} の間にあるものはすべて、SWIG で生成された .c ファイルに逐語的にコピーされます。したがって、これは SWIG の問題ではなく、コンパイラの問題です。インクルードされたヘッダー ファイルを検出できるように、コンパイラ コマンドに -I を必ず指定してください。

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

最初の行は、foo.i の %{...%} ブロックで定義したコードを含む bindings.c を生成します。

于 2013-10-23T22:28:02.727 に答える