現在、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)、これをメインおよび補助ラッパー ファイルの両方に反映します。
現在、これらのファイルに対して面倒なポストプロセッサを実行する必要がありますが、これは脆弱です。