2012-07-27 15 views
16

SWIGを使用してMicrosoft Visual Studio 2010を使用してDLLを作成しようと何週間も試みてきました。すでにこのプロセスを経ていれば、慎重な段階的なプロセス説明を与えるほど親切でしょうか?私はどこでもオンラインで見てきましたし、これをやろうと多くの時間を費やしました。私が見つけたすべてのチュートリアルは時代遅れであるか、ひどく説明されています。Visual Studio 2010からSWIGを使用してDLLを作成する方法

私はこのプロセスをcygwinで成功させました。しかし、あなたの知る人の中には、cygwin DLLはあまり実用的ではありません。

私が知っている.i、.cpp、および.hファイルでは、DLLを一緒に作成できます。私はVisual Studio C++ 2010でこれを行う方法を知る必要があります。私がターゲットとしている言語はPythonです。

私に別のサイトを紹介しないでください。私はすでにそこにいて、それを試みた可能性があるからです。また、私は近い将来にこれを動作させることが非常に重要であるので、snarkyコメントをしないでください。

ご協力いただきありがとうございます。

答えて

46

ステップバイステップの手順。これは、ソースを持っていて、ソースを直接そのソースにリンクする単一のDLL拡張を構築していることを前提としています。私は仕事のプロジェクトを作った後、それを通って戻ってこなかったので、何かを見逃したかもしれません。あなたがステップにこだわっているなら、この投稿にコメントしてください。既存のDLLがあり、それをラップするPython拡張DLLを作成する場合は、この手順が少し異なります。この投稿にコメントがあれば、私はそれを拡張します。

編集2012年8月19日:Cの例で始まる場合は、ステップ13で-c++を使用していないとステップ14および19

    でラップファイル拡張子に対して .c代わりに .cxxを使用Visual Studioの2010
  1. ファイル、新しい、既存のコードからのプロジェクト...
  2. を起動
  3. "のVisual C++" プロジェクトの種類を選択し、[次へ]をクリックします。
  4. .cpp/.h/.iファイルのあるプロジェクトファイルの場所を入力します。
  5. プロジェクト名には、.iファイルの%moduleステートメントで使用される名前を選択します(大文字小文字の問題)。
  6. 「ダイナミックリンクライブラリ(DLL)プロジェクト」を選択し、「次へ」をクリックします。
  7. 検索パスを含めるPython.hファイルへのパス。通常は "C:\ Python27 \ include"のようにして、次へをクリックします。
  8. [完了]をクリックします。
  9. ソリューションエクスプローラでプロジェクトを右クリックし、[追加]、[既存のアイテム...]を選択し、.iファイルを選択します。
  10. .iファイルを右クリックし、[プロパティ]を選択し、[構成]の[すべての構成]を選択します。
  11. アイテムタイプを「カスタムビルドツール」に変更し、「適用」をクリックします。
  12. [プロパティ]で[カスタムビルドツール]を選択します(上記の「適用」の後に表示されます)。
  13. "swig -C++ -python -outdir $(Outdir)%(Identity)"のコマンドラインを入力します(これはSWIGがあなたのパスにあると仮定し、必要に応じて生成された.pyファイルをDebugまたはReleaseディレクトリにリダイレクトします)。
  14. 出力に「%(Filename)_wrap.cxx; $(Outdir)%(Filename).py」と入力します。
  15. [OK]をクリックします。
  16. .iファイルを右クリックし、[コンパイル]を選択します。
  17. プロジェクトを右クリックし、[追加]、[新規フィルタ]に「Generated Files」と名前を付けます。
  18. "Generated Files"を右クリックし、Propertiesをクリックし、 "SCC Files"を "False"に設定します(ソースコントロールを使用すると、VS2010はこのフィルタで生成されたファイルをチェックインしません)。
  19. "Generated Files"、Add、Exit Itemを右クリックし、コンパイルによって生成された_wrap.cxxファイルを選択します。
  20. プロジェクトを右クリックし、[プロパティ]をクリックします。
  21. 構成「すべての構成」を選択します。
  22. Configuration Properties、Linker、General、Additional Library Directoriesを選択し、Pythonライブラリへのパス(通常は "C:\ Python27 \ libs")を追加します。
  23. [構成プロパティ]、[全般]を選択し、[TargetName]を "_ $(ProjectName)"に設定します。
  24. ターゲットエクステンションを ".pyd"に設定します。
  25. プロジェクトの「リリース」バージョンをビルドします。 Python自体のデバッグバージョンをビルドしない限り、Debugバージョンをビルドすることはできません。
  26. コンソールを開き、プロジェクトのリリースディレクトリに移動し、Pythonを実行し、モジュールをインポートして関数を呼び出します。
+0

ありがとうございましたこのプロセスを試行錯誤で見つけようと私に(おそらく他の多くの人たちも)節約していただきありがとうございます!私は「プロジェクトのプロパティ>> VC++ディレクトリ>>インクルードディレクトリ」に追加する必要がありました。「私のC:\ Python27 \ include;それ以外の場合は夢のように働いた!ところで、私はMicrosoft Visual C++ Expressを使用していました。プロセスは明らかに同じです。 – user1449530

+0

@マーク - 偉大な投稿、親切に拡張DLLを持っているケースに拡張できますか? –

+0

SWIGはPython 64ビット版では動作しません。代わりに32ビット版を使用してください。 – odedfos

関連する問題