From ad40a78f3ec5990f9d4ed1d3622f6782633d9f19 Mon Sep 17 00:00:00 2001 From: jcarreira Date: Tue, 22 Sep 2015 11:15:05 +0100 Subject: [PATCH] Fix windows build using static libraries --- CMakeLists.txt | 1 + cmake/Win32.cmake | 2 ++ config.h.in | 3 +++ lib/CMakeLists.txt | 6 +++++- modules/CMakeLists.txt | 1 - modules/PlaYUVerModuleFactory.cpp | 6 ++++++ 6 files changed, 17 insertions(+), 2 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index dc412a4..d90ee41 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -29,6 +29,7 @@ OPTION( USE_FERVOR "Add Fervor support" OFF ) OPTION( USE_WERROR "Warnings as errors" OFF ) OPTION( USE_QT4 "Build with Qt4" OFF ) OPTION( USE_QTDBUS "Build with Qt4" OFF ) +OPTION( USE_DYNLOAD "Use dynamic load of modules" ON ) # To be switched on when releasing. OPTION(RELEASE_BUILD "Remove Git revision from program version (use for stable releases)" ON) diff --git a/cmake/Win32.cmake b/cmake/Win32.cmake index 4f16659..bd37a98 100644 --- a/cmake/Win32.cmake +++ b/cmake/Win32.cmake @@ -19,6 +19,8 @@ SET(QT_DIR "QT-Dir" CACHE PATH "Where to find QT Lib on Windows") SET(QT_DLL_POSTFIX "" CACHE STRING "Postfix to dll's name for debug" ) SET(CMAKE_PREFIX_PATH "${CMAKE_PREFIX_PATH} ${QT_DIR}" ) +SET(WINDLLIB "Dl-location" CACHE PATH "Where to find DL Lib on Windows") + IF( NOT USE_QT4 ) INSTALL(FILES ${QT_DIR}/bin/Qt5Core${QT_DLL_POSTFIX}.dll DESTINATION bin ) diff --git a/config.h.in b/config.h.in index 8806e27..7203346 100644 --- a/config.h.in +++ b/config.h.in @@ -51,6 +51,9 @@ /* QtDBus */ #cmakedefine USE_QTDBUS +/* Dynamic Modules Loading */ +#cmakedefine USE_DYNLOAD + #cmakedefine PLAYUVER_THREADED_MODULES /* Boost support */ diff --git a/lib/CMakeLists.txt b/lib/CMakeLists.txt index 8d5ed49..58bb877 100644 --- a/lib/CMakeLists.txt +++ b/lib/CMakeLists.txt @@ -47,7 +47,11 @@ set(plaYUver_Lib_HEADERS CONFIGURE_FILE( PlaYUVerConfig.cmake.in PlaYUVerConfig.cmake @ONLY) -ADD_LIBRARY( PlaYUVerLib SHARED ${plaYUver_Lib_SRCS} ) +IF( WIN32 ) + ADD_LIBRARY( PlaYUVerLib STATIC ${plaYUver_Lib_SRCS} ) +ELSE() + ADD_LIBRARY( PlaYUVerLib SHARED ${plaYUver_Lib_SRCS} ) +ENDIF() INCLUDE_DIRECTORIES( ${FFMPEG_INCLUDE_DIRS} ${OpenCV_INCLUDE_DIRS} ) TARGET_LINK_LIBRARIES( PlaYUVerLib ${FFMPEG_LIBRARIES} ${OpenCV_LIBRARIES} ) diff --git a/modules/CMakeLists.txt b/modules/CMakeLists.txt index e6056e5..17a1537 100644 --- a/modules/CMakeLists.txt +++ b/modules/CMakeLists.txt @@ -56,4 +56,3 @@ file( APPEND ${CMAKE_CURRENT_BINARY_DIR}/ModulesListHeader.h "#endif // __MODU INCLUDE_DIRECTORIES( ${OpenCV_INCLUDE_DIRS} ) ADD_LIBRARY( PlaYUVerModules ${plaYUver_Mod_SRCS} ) TARGET_LINK_LIBRARIES( PlaYUVerModules PlaYUVerLib ${OpenCV_LIBRARIES} -ldl ) - diff --git a/modules/PlaYUVerModuleFactory.cpp b/modules/PlaYUVerModuleFactory.cpp index 8395cc0..68a28ab 100644 --- a/modules/PlaYUVerModuleFactory.cpp +++ b/modules/PlaYUVerModuleFactory.cpp @@ -25,7 +25,9 @@ #include "config.h" #include #include +#ifdef USE_DYNLOAD #include +#endif #include "PlaYUVerModuleFactory.h" #include "ModulesListHeader.h" @@ -63,6 +65,7 @@ Void PlaYUVerModuleFactory::Register( const char* moduleName, CreateModuleFn pfn Bool PlaYUVerModuleFactory::RegisterDl( const char* dlName ) { +#ifdef USE_DYNLOAD void *pHndl = dlopen( dlName, RTLD_NOW ); if( pHndl == NULL ) { @@ -77,6 +80,9 @@ Bool PlaYUVerModuleFactory::RegisterDl( const char* dlName ) } Register( dlName, pfnCreate ); return true; +#else + return false; +#endif } PlaYUVerModuleIf *PlaYUVerModuleFactory::CreateModule( const char* moduleName )