Jak uzyskać python .pyd dla systemu Windows z kodu źródłowego c / c ++? (aktualizacja: energiczny teraz w Pythonie na wypadek, gdybyś tego chciał)

Jak uzyskać z kodu źródłowego rozszerzenia C / C ++ do pliku pyd dla okien (lub innego elementu, który mógłbym importować do Pythona)?

edytować: Określona biblioteka, której chciałem użyć (BRISK), została uwzględniona wOpenCV 2.4.3, więc moja potrzeba tej umiejętności zniknęła na razie. W przypadku, gdy przybyłeś tutaj szukając BRISK, tutaj jest prostyBRISK w demo Pythona że wysłałem.

MamEnergiczny kod źródłowy (Ściągnij), które chciałbym zbudować i używać w mojej aplikacji Pythona. Doszedłem do wygenerowania pliku brisk.pyd ... ale miał on 0 bajtów. Jeśli istnieje lepszy / alternatywny sposób na uzyskanie pliku brisk.pyd, to oczywiście jestem na to otwarty.

edytować: Proszę zignorować wszystkie próby w moim oryginalnym pytaniu poniżej i zobaczyć moją odpowiedź, która była możliwa dzięki szczegółowemu opisowi obmarga

Gdzie się mylę?

Distutils bez ścieżki do biblioteki: Najpierw próbowałem zbudować źródło tak, jak jest to z distutils i następującym setup.py (właśnie zacząłem uczyć się distutils, więc jest to strzał w ciemności). Struktura kodu źródłowego BRISK znajduje się na dole tego pytania w celach informacyjnych.

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])

To natychmiast dało mi następujące linie i0 bajtów brisk.pyd gdzieś w folderze kompilacji. Tak blisko?

running build
running build_ext

Distutils ze ścieżką biblioteki: Podrap tę próbę. Dodałem więc dwa wiersze biblioteki, które zostały skomentowane w powyższym pliku setup.py. Wydawało się, że wszystko pójdzie dobrze, dopóki nie otrzymałem tego błędu łączenia:

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

Niekontrolowane wymachiwanie: Pomyślałem, że może trzeba było zbudować biblioteki, więc zrobiłem awaryjny kurs (wiele awarii) z cmake + mingw - mingw + vc ++ express 2010 w następujący sposób:

cmake gui: źródło: c: / brisk, build: c: / brisk / buildcmake gui: skonfigurować dla Visual Studio 10cmake gui: użyj domyślnych opcji i wygeneruj (CMAKE_BACKWARDS_COMPATIBILITY, CMAKE_INSTALL_PREFIX, EXECUTABLE_OUTPUT_PATH, LIBRARY_OUTPUT_PATH)

VC ++ Express 10: Zmień na Zwolnij i zbuduj rozwiązanie wygenerowane przez cmake i uzyskaj około 20 stron, które wyglądają jak niekrytyczne ostrzeżenia, po których wszyscy odnieśli sukces. Uwaga - nie generują tego żadne biblioteki DLL. Generuje następujące biblioteki o rozmiarze podobnym do tych dołączonych do pobrania:

win32/lib/Release/
    agast_static.lib
    brisk_static.lib

Dalsze wymachiwanie.

Odpowiednia struktura pliku źródłowego BRISK w celach informacyjnych:
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

questionAnswers(2)

yourAnswerToTheQuestion