3

おそらく、これを別々の質問に分割する必要がありますが、これをすべて試してみると、すべてが相互に関連しているわけではないのではないかと思います.

裏話は次のとおりです。Linux と Windows の両方にいくつかの C ライブラリがあります。誰かが Linux で swig を使用して、C ライブラリの API を Python に公開しました。彼は多かれ少なかれ、swig のビルド スクリプト (.i ファイル) を作成し、swig はラッパー C ファイルを作成し、gcc を使用してその C ファイルをコンパイルし、元のライブラリにリンクして Python モジュールを取得しました。

今、私は彼の仕事を手渡され、Windows ライブラリ用にそれを行うように依頼されました。彼の .i ファイルを使用して Windows 用のファイルを作成する簡単な方法を見つけられることを願っていました。Visual Studio 2010 を使用しています。

私は swig をあまり知らないし、C や Visual Studio 環境にも精通していないので、最終的に実験をあきらめて、ここで質問することにしました。

質問:

  1. 私が持っている C ライブラリは静的です。それは大丈夫ですか?swig が生成するラッパー ファイルを使用して静的ライブラリにリンクし、動的ライブラリ (Python で使用するため) を作成することはできますか? 答えが「いいえ」の場合、これは実際には複雑になる可能性があります。基本的に、特定のライブラリ (「A」と呼びます) の API を公開したいと考えています。そのライブラリは、「L」、「C」、および「D」に依存しています。「A」と「L」のソース コードにアクセスできるので、好きなようにコンパイルできますが、「C」と「D」は制御できません。これらは静的ライブラリです。

  2. Windows で Python を使用する場合、必要な出力ファイルは正確には何ですか? DLL?.pyd 拡張子が必要ですか? 私は Linux (過去に Cython を使用) ではこのすべてに精通していましたが、Windows ではそうではありませんでした。

  3. Visual Studio 2010 でこれを処理する方法を教えてください。ドキュメントは Visual Studio 6 と上記のいくつかのバージョンをカバーしていますが、詳細は比較的まばらです。代わりに、SWIG に付属の .dsp/.dsw ファイルを使用することをお勧めします。付属の簡単な例を使用して試しました。VS2010 は dsp/dsw ファイルを VS2010 形式に変換し、.pyd ファイルを作成して、すべてが機能します。ただし、プロジェクト/ソリューションのプロパティに移動すると、swig設定や、.pyd 拡張子を持つものを作成する設定が表示されません! カスタム/ビルド後の設定が空です! VS2010 がプロジェクト ファイルをその形式に変換したときに、ビルド後のすべての設定が処理されたのに、それらが表示されないのではないかと思います。

どうもありがとう!

4

1 に答える 1

1
  1. それで問題はないはずです。通常、外部ライブラリを追加するのと同じように、VS に「L」、「C」、および「D」ライブラリを追加するだけです。

  2. はい。ターゲットはダイナミック ライブラリ (.dll) である必要がありますが、出力ファイルの名前は _something.pyd に変更する必要があります (プロジェクトの構成方法については、以下のリンクを参照してください)。

  3. SWIG は VS ソリューション ビルド ツールチェーンに統合できます。SWIG と Visual Studio の使用方法のマニュアルを以前に作成し、更新しました。

Visual Studio 2010 で SWIG を使用する方法

于 2012-07-23T04:23:15.943 に答える