1

現在、Swig D バインディングはシンボルに以下を使用しますlibfun

mixin(bindCode("libfun", "D_libfun"));
extern(C) int function(void* jarg1) libfun;

ここで、D_libfunシンボルはライブラリとしてコンパイルされた cxx ラッパーで定義されます。したがって、シンボルlibfunはとしてエクスポートされextern(C)、グローバル スコープを持ちます。シンボルが既存のシンボル (読み取りなど) と衝突するケースに直面しextern(C)、この swig ファイルまでさかのぼって不明なランタイム クラッシュが発生しました。

次の方法はありますか?

  • extern(C)中間宣言の導入を避ける
  • または、これらのシンボルにユーザー指定のプレフィックスまたはサフィックスを追加し (例: extern(C) mylib_libfun)、これをメインおよび補助ラッパー ファイルの両方に反映します。

現在、これらのファイルに対して面倒なポストプロセッサを実行する必要がありますが、これは脆弱です。

4

1 に答える 1

0

2番目に提案された解決策は最も簡単な解決策です。SWIGの高度な名前変更を使用してこれを実行し、すべてを一度に実行できます。

たとえば、次の関数が与えられます。

void read();

次のようにして、自動的に挿入されたプレフィックスを使用してラップできますmylib_

%module test

%rename("mylib_%s") "";

void read();
于 2012-09-16T14:38:37.417 に答える