SWIG バインディングを初めて実装した約 2 年前に、この問題に遭遇しました。大量のコードを公開するとすぐに、SWIG が出力する C++ ファイルのサイズが大きすぎて、コンパイラがそれらを処理できないという点に到達しました。この問題を回避する唯一の方法は、インターフェイスを複数のモジュールに分割し、それらを個別にコンパイルすることでした。
これにはいくつかの欠点があります。
• 各モジュールは、他のモジュールの依存関係を認識している必要があります。この側面を処理するインターフェイス ファイルを生成するスクリプトがありますが、複雑さが増します。
• モジュールを追加するたびに、動的リンカーがコードをロードするのに必要な時間が増加します。すべてのサブモジュールをインポートするinit .py ファイルを追加したので、コードが分割されているという事実はユーザーに透過的ですが、常に表示されるのは長い読み込み時間です。
現在、ビルド スクリプト/ビルド プロセスを見直しており、この問題の解決策が現在のものよりも優れているかどうかを確認したいと考えていました。理想的には、すべてのラッパー コードを含む 1 つの共有ライブラリが必要です。
SWIGでこれを達成する方法を知っている人はいますか? 特定のプロジェクト用に Ruby で記述されたカスタム コードをいくつか見たことがありますが、これを可能にするために出力が後処理されていますが、Python ラッパーの実現可能性を見ると、それほど簡単ではないように見えます。