Вот: мой файл 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, и что нужно изменить в исходном коде, чтобы он работал?
LIB_TYPE
не нужен. Вы точно дублируете поведение CMake, когда используетсяBUILD_SHARED_LIBS
и не указан тип (ниSTATIC
, ниSHARED
) в вызовеadd_library()
. - person Angew is no longer proud of SO   schedule 02.03.2015