CMAKE для Windows DLL с проектом OpenCV

Вот: мой файл Cmakelists.txt

project(facedetectlib)
cmake_minimum_required(VERSION 2.8)
include (GenerateExportHeader)

SET(CMAKE_VERBOSE_MAKEFILE TRUE)

file(GLOB HEADER_LIST ./include/*.h)
include_directories(./include)

aux_source_directory(. SRC_LIST)

find_package(OpenCV REQUIRED )

# Allow the developer to select if Dynamic or Static libraries are built
OPTION (BUILD_SHARED_LIBS "Build Shared Libraries" OFF)
# Set the LIB_TYPE variable to STATIC
SET (LIB_TYPE STATIC)
IF (BUILD_SHARED_LIBS)
  # User wants to build Dynamic Libraries, so change the LIB_TYPE variable to CMake keyword 'SHARED'
  SET (LIB_TYPE SHARED)
ENDIF (BUILD_SHARED_LIBS)

add_library(ocvfacedetectlib ${LIB_TYPE}  ${SRC_LIST} ${HEADER_LIST})
target_link_libraries(ocvfacedetectlib ${OpenCV_LIBS})
GENERATE_EXPORT_HEADER( ocvfacedetectlib
             BASE_NAME ocvfacedetectlib
             EXPORT_MACRO_NAME ocvfacedetectlib_EXPORT
             EXPORT_FILE_NAME ocvfacedetectlib_Export.h
             STATIC_DEFINE ocvfacedetectlib_BUILT_AS_STATIC
)

Используя этот файл cmake и собрав несколько инструкций отсюда:

http://www.cmake.org/Wiki/BuildingWinDLL

Я пытаюсь выяснить, правильно ли создается DLL. В моем заголовочном файле для моей маленькой библиотеки есть следующее:

#include "ocvfacedetectlib_Export.h"
typedef unsigned char uint8_t;
extern "C" {
ocvfacedetectlib_EXPORT uint8_t * facedetect( uint8_t *imageData, long buffsize,  unsigned char *retbuffer );
}

И тогда у меня есть в моем файле .cpp это:

ocvfacedetectlib_EXPORT uint8_t * facedetect( uint8_t *imageData, long buffsize, unsigned char *retbuffer )
{ ..do stuff using OpenCV
 ...}

Кажется, этого достаточно для создания DLL, но я не уверен, правильно ли она создается - я не могу загрузить ее, используя js.ctypes(), что я и пытаюсь сделать в качестве конечной цели.

Что бы это ни стоило, мой .cpp также имеет метод main(), и когда я собираю код в .exe, он запускается.

Каков правильный способ создания Windows DLL из проекта CMake для более поздних версий CMake, чем 2.8, и что нужно изменить в исходном коде, чтобы он работал?


person Derek    schedule 27.02.2015    source источник
comment
Я понимаю, о чем вы спрашиваете, но не могли бы вы отредактировать свой вопрос так, чтобы он включал реальный вопрос?   -  person Greg Kramida    schedule 28.02.2015
comment
Я бы сначала сделал небольшую исполняемую цель C, которая пытается использовать библиотеку, и убедился, что она может использовать экспортированные библиотечные функции. Хорошо, вы даже можете добавить еще одну крошечную тестовую функцию в свою библиотеку, чтобы сделать это. Если исполняемый файл может использовать библиотеку, это проблема совместимости, но с вашей библиотекой все в порядке.   -  person Greg Kramida    schedule 28.02.2015
comment
Я не понимаю, о чем вы спрашиваете, но если у вас есть вопрос о js-ctypes (который является ctypes из priveagled javascript в firefox), дайте мне знать. :)   -  person Noitidart    schedule 28.02.2015
comment
ну, это, вероятно, отдельная ветка на данный момент, но в целом у меня есть вопрос, как решить проблемы с отладкой, например, когда ctypes не может загрузить dll в целом. это случалось со мной и раньше, и в тот раз я наткнулся на исправление.   -  person Derek    schedule 28.02.2015
comment
Примечание: весь танец с LIB_TYPE не нужен. Вы точно дублируете поведение CMake, когда используется BUILD_SHARED_LIBS и не указан тип (ни STATIC, ни SHARED) в вызове add_library().   -  person Angew is no longer proud of SO    schedule 02.03.2015