C / C ++拡張ソースコードからWindows用のpydファイル(またはPythonにインポートできる他のアイテム)に移動するにはどうすればよいですか?
編集:私が使用したい特定のライブラリ(BRISK)はOpenCV 2.4.3に含まれていたので、このスキルの必要性は当分の間なくなりました。あなたがBRISKを探してここに来た場合のために、ここに私が投稿したPythonデモの簡単なBRISKがあります。
Pythonアプリケーションでビルドして使用したいBriskソースコード(ダウンロード)があります。brisk.pydファイルを生成するところまで到達しました...しかし、それは0バイトでした。brisk.pydファイルを目指すためのより良い/代替の方法があれば、もちろん私もそれを受け入れます。
編集:以下の私の元の質問のすべての試みを無視して、obmargの詳細なウォークスルーによって可能になった私の答えを見てください
どこが間違っているのですか?
ライブラリパスのないDistutils:最初に、distutilsと次のsetup.pyを使用してソースをそのままビルドしようとしました(distutilsの学習を開始したばかりなので、これは暗闇の中でのショットです)。BRISKソースコードの構造は、参照用にこの質問の下部にあります。
from distutils.core import setup, Extension module1 = Extension('brisk', include_dirs = ['include', 'C:/opencv2.4/build/include', 'C:/brisk/thirdparty/agast/include'], #libraries = ['agast_static', 'brisk_static'], #library_dirs = ['win32/lib'], sources = ['src/brisk.cpp']) setup (name = 'BriskPackage', ext_modules = [module1])
それはすぐに私に次の行とビルドフォルダのどこかに0バイトのbrisk.pydを与えました。とても近いですか?
running build running build_ext
ライブラリパスを持つDistutils:その試みをスクラッチします。そこで、上記のsetup.pyでコメント化されている2つのライブラリ行を追加しました。このリンクエラーが発生するまでは問題ないようでした。
creating build\lib.win32-2.7 C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\BIN\link.exe /DLL /nologo /INCREMENTAL:NO /LIBPATH:win32/lib /LIB PATH:C:\Python27_32bit\libs /LIBPATH:C:\Python27_32bit\PCbuild agast_static.lib brisk_static.lib /EXPORT:initbrisk build \temp.win32-2.7\Release\src/brisk.obj /OUT:build\lib.win32-2.7\brisk.pyd /IMPLIB:build\temp.win32-2.7\Release\src\brisk. lib /MANIFESTFILE:build\temp.win32-2.7\Release\src\brisk.pyd.manifest LINK : error LNK2001: unresolved external symbol initbrisk build\temp.win32-2.7\Release\src\brisk.lib : fatal error LNK1120: 1 unresolved externals error: command '"C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\BIN\link.exe"' failed with exit status 1120
制御されていないフレアリング:ライブラリを構築する必要があると思ったので、cmake + mingw --mingw + vc ++ express 2010を使用して次のようにクラッシュコース(多くのクラッシュ)を実行しました。
- cmake gui:ソース:c:/ brisk、ビルド:c:/ brief / build
- cmake gui:VisualStudio10用に構成する
- cmake gui:デフォルトのオプションを使用して生成します(CMAKE_BACKWARDS_COMPATIBILITY、CMAKE_INSTALL_PREFIX、EXECUTABLE_OUTPUT_PATH、LIBRARY_OUTPUT_PATH)
VC ++ Express 10:リリースに変更してcmakeによって生成されたソリューションを構築し、重大ではない警告のように見える約20ページを取得し、その後すべて成功しました。注-これによってdllは生成されません。ダウンロードに含まれているものと同様のサイズの次のライブラリを生成します。
win32/lib/Release/ agast_static.lib brisk_static.lib
さらなるフレア。
参照用の関連するBRISKソースファイル構造:
build/ (empty)
include/brisk/
brisk.h
hammingsse.hpp
src
brisk.cpp
demo.cpp
thirdparty/agast/
include/agast/
agast5_8.h ....
cvWrapper.h
src/
agast5_8.cc ...
CMakeLists.txt
win32/
bin/
brisk.mexw32
opencv_calib3d220.dll ...
lib/
agast_static.lib
brisk_static.lib
CMakeLists.txt
FindOpenCV.cmake
Makefile