Ich versuche, eine Kette von externen Bibliotheken (liblept mit libjpeg) zu einem Projekt zu verknüpfen. Zahlreiche Versuche und die Suche im Internet verursacht nur verschiedene Cmake Fehler, dieCmake: statische Verknüpfung erfordert Bibliotheken zur Laufzeit (appcrash 0xC0000135)
Die Struktur des Projektordners ziemlich verwirrend ist:
/Project
|leptonica
|--|include
| |--|leptonica
| | |--|<allheaders.h used by main.cpp is here>
| | |<jpeglib.h used by Leptonica is here>
| |lib
| |--|<.lib files here>
|CMakeLists.txt
|main.cpp
Nun werden die CMakeLists. Das einzige, was ich über das Verknüpfen dieser Bibliotheken weiß, ist, dass die grundlegenden Tipps rund um Stack Overflow unterschiedliche Fehler erzeugen. Mit Ausnahme der folgenden:
Dies ruft das Projekt verknüpft, aber die Anwendung stürzt mit 0xC0000135
ab (konnte die DLL nicht finden).
cmake_minimum_required(VERSION 3.5)
project(Project)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
set(SOURCE_FILES main.cpp)
add_library(liblept168 STATIC IMPORTED)
set_target_properties(
liblept168
PROPERTIES LINKER_LANGUAGE CXX
IMPORTED_LOCATION %Project%/leptonica/lib/liblept168.lib)
add_library(libjpeg8c-static-mtdll STATIC IMPORTED)
set_target_properties(
libjpeg8c-static-mtdll
PROPERTIES LINKER_LANGUAGE CXX
IMPORTED_LOCATION %Project%/leptonica/lib/libjpeg8c-static-mtdll.lib)
link_directories(leptonica/lib)
include_directories(leptonica/include)
include_directories(leptonica/include/leptonica)
add_executable(Project "${SOURCE_FILES}")
target_link_libraries(Project liblept168 libjpeg8c-static-mtdll)
Was ist los?
Wenn die ausführbare Datei für eine DLL sucht dann vermute ich, Sie sind nicht statisch die Bibliothek verknüpft, sondern nur die Stub-LIB-Datei von Windows verwendet, um DLL-Funktionen zu verweisen. Überprüfen Sie dies: http://StackOverflow.com/questions/6421693/why-are-lib-files-beasts-of-such-a-duplicitous-nature. Das ist ein Problem mit LIB-Dateien, bei denen es sich entweder um Bibliotheken mit echter Implementierung oder um Stubs handeln kann, die zur dynamischen Verknüpfung mit einer DLL verwendet werden. Haben Sie versucht, die DLL zum Binärordner hinzuzufügen? – Jack