Como obter um python .pyd para Windows a partir do código-fonte c / c ++? (atualização: vivo agora em Python, caso seja o que você quer)

Como obter do código-fonte da extensão C / C ++ para um arquivo pyd para windows (ou outro item que eu poderia importar para o Python)?

editar: A biblioteca específica que eu queria usar (BRISK) foi incluídaOpenCV 2.4.3 então minha necessidade por essa habilidade foi embora por enquanto. Caso você tenha vindo aqui procurando BRISK, aqui está um simplesBRISK em demonstração de Python que postei.

Eu tenho oVivo Código fonte (baixar) que eu gostaria de construir e usar no meu aplicativo python. Cheguei a gerar um arquivo brisk.pyd ... mas era 0 bytes. Se houver uma maneira melhor / alternativa de apontar para um arquivo brisk.pyd, claro que também estou aberto a isso.

editar: Por favor, ignore todas as tentativas na minha pergunta original abaixo e veja a minha resposta, que foi possível graças ao passo a passo detalhado de obmarg

Onde eu estou errando?

Distutilos sem caminho de biblioteca: Primeiro eu tentei construir a fonte como está com distutils e o seguinte setup.py (eu acabei de começar a aprender distutils, então este é um tiro no escuro). A estrutura do código fonte do BRISK está no final desta questão para referência.

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

Isso instantaneamente me deu as seguintes linhas e um0 byte brisk.pyd em algum lugar na pasta de compilação. Tão perto?

running build
running build_ext

Distutilos com caminho da biblioteca: Risque essa tentativa. Então eu adicionei as duas linhas da biblioteca que estão comentadas no setup.py acima. Isso pareceu dar certo até que recebi este erro de ligação:

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

Flailing descontrolado: Eu pensei que talvez as bibliotecas precisassem ser construídas, então eu fiz um curso intensivo (com muita pane) com o cmake + mingw - mingw + vc ++ express 2010 da seguinte maneira:

cmake gui: fonte: c: / brisk, compilação: c: / brisk / buildcmake gui: configurar para o Visual Studio 10cmake gui: use as opções padrão e gere (CMAKE_BACKWARDS_COMPATIBILITY, CMAKE_INSTALL_PREFIX, EXECUTABLE_OUTPUT_PATH, LIBRARY_OUTPUT_PATH)

VC ++ Express 10: Mude para liberar e construa a solução gerada pelo cmake e obtenha cerca de 20 páginas do que parecem ser avisos não críticos seguidos por todos os bem-sucedidos. Nota - nenhuma dll é gerada por isso. Ele gera as seguintes bibliotecas de tamanho similar àquelas incluídas no download:

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

Mais agitando.

Estrutura de arquivo de origem relevante do BRISK para referência:
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