Wie bekomme ich eine Python-.pyd-Datei für Windows aus dem C / C ++ - Quellcode? (Update: flott jetzt in Python für den Fall, dass es das ist, was Sie wollen)

Wie komme ich vom Quellcode der C / C ++ - Erweiterung zu einer pyd-Datei für Windows (oder einem anderen Element, das ich in Python importieren könnte)?

bearbeiten: Die spezifische Bibliothek, die ich verwenden wollte (BRISK), war in enthaltenOpenCV 2.4.3 so ging mein Bedürfnis nach dieser Fähigkeit vorerst weg. Falls Sie hierher gekommen sind, um nach BRISK zu suchen, finden Sie hier ein einfaches BeispielBRISK in der Python-Demo das habe ich gepostet.

ich habeRege Quellcode (herunterladen), die ich in meiner Python-Anwendung erstellen und verwenden möchte. Ich bin so weit gekommen, eine brisk.pyd-Datei zu generieren ... aber es waren 0 Bytes. Wenn es eine bessere / alternative Möglichkeit gibt, nach einer brisk.pyd-Datei zu suchen, bin ich natürlich auch dafür offen.

bearbeiten: Bitte ignorieren Sie alle Versuche in meiner ursprünglichen Frage unten und sehen Sie sich meine Antwort an, die durch Obmargs detaillierte Anleitung möglich wurde

Wo gehe ich falsch?

Distutils ohne Bibliothekspfad: Zuerst habe ich versucht, die Quelle so wie sie ist mit distutils und dem folgenden setup.py zu erstellen (ich habe gerade angefangen, distutils zu lernen, also ist dies eine Einstellung im Dunkeln). Die Struktur des BRISK-Quellcodes befindet sich am Ende dieser Referenzfrage.

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

Das gab mir sofort die folgenden Zeilen und ein0 Byte brisk.pyd irgendwo im Build-Ordner. So nah?

running build
running build_ext

Distutils mit Bibliothekspfad: Scratch diesen Versuch. Also habe ich die beiden Bibliothekszeilen hinzugefügt, die in der obigen setup.py-Datei auskommentiert sind. Das schien in Ordnung zu sein, bis ich diesen Verbindungsfehler bekam:

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

Unkontrolliertes Dreschen: Ich dachte, die Bibliotheken müssten vielleicht gebaut werden, also habe ich einen Crashkurs (viele Abstürze) mit cmake + mingw - mingw + vc ++ express 2010 wie folgt durchgeführt:

cmake gui: Quelle: c: / flott, Build: c: / flott / Buildcmake gui: Konfigurieren Sie für Visual Studio 10cmake gui: Standardoptionen verwenden und generieren (CMAKE_BACKWARDS_COMPATIBILITY, CMAKE_INSTALL_PREFIX, EXECUTABLE_OUTPUT_PATH, LIBRARY_OUTPUT_PATH)

VC ++ Express 10: Wechseln Sie zu Release und erstellen Sie die von cmake generierte Lösung. Sie erhalten ungefähr 20 Seiten mit unkritischen Warnungen, gefolgt von allen erfolgreichen. Hinweis - Dadurch werden keine DLLs generiert. Die folgenden Bibliotheken werden in ähnlicher Größe wie die im Download enthaltenen erzeugt:

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

Weiteres Dreschen.

Relevante BRISK-Quelldateistruktur als Referenz:
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

Antworten auf die Frage(2)

Ihre Antwort auf die Frage