2016-05-15 18 views
0

プロジェクトに外部ライブラリのチェーン(libjpegを使用してliblept)をリンクしようとしています。Cmake:静的リンクではランタイムにライブラリが必要です(appcrash 0xC0000135)

/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 

今、CMakeLists:インターネットを検索数多くの試みとはちょうど

プロジェクトフォルダの構造はかなり混乱して異なるcmakeのエラーを引き起こしました。これらのライブラリをリンクすることについて私が知っている唯一の事は、スタックオーバーフローの周りにある基本的なヒントが異なるエラーを生成することです。以下を除きます:

これはプロジェクトをリンクしますが、アプリケーションは0xC0000135(dllの検索に失敗しました)でクラッシュします。

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) 

何が問題なのですか。

+1

:結果CMakeListsはこのようになります。これをチェックしてください:http://stackoverflow.com/questions/6421693/why-are-lib-files-beasts-of-such-a-duplicitous-atureこれは実際の実装のライブラリ、DLLと動的にリンクするために使用されるスタブのどちらかであるLIBファイルの問題です。 DLLをバイナリフォルダに追加しようとしましたか? – Jack

答えて

0

.libについてのおかげで、私はこの問題を発見しました。事はliblept168.libは、liblept168.dllのリンクファイルであり、静的ライブラリではありません。したがって、dllは実行可能フォルダにコピーする必要があります。実行ファイルは、DLLを探しているなら、私はあなたが静的ライブラリをリンクするが、DLL関数を参照するためにWindowsで使用されるだけでスタブLIBファイルされていないと思います

cmake_minimum_required(VERSION 3.5) 
project(Jpeg_to_values) 

set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11") 

set(SOURCE_FILES main.cpp) 

add_library(liblept168 SHARED IMPORTED) 
set_target_properties(
    liblept168 
    PROPERTIES LINKER_LANGUAGE CXX 
    IMPORTED_LOCATION ${PROJECT_SOURCE_DIR}/leptonica/lib/liblept168.dll 
    IMPORTED_IMPLIB ${PROJECT_SOURCE_DIR}/leptonica/lib/liblept168.lib) 
add_library(libjpeg8c-static-mtdll STATIC IMPORTED) 
set_target_properties(
     libjpeg8c-static-mtdll 
     PROPERTIES LINKER_LANGUAGE CXX 
     IMPORTED_LOCATION ${PROJECT_SOURCE_DIR}/leptonica/lib/libjpeg8c-static-mtdll.lib) 
link_directories(leptonica/lib) 
include_directories(leptonica/include) 
include_directories(leptonica/include/leptonica) 

add_executable(Jpeg_to_values "${SOURCE_FILES}") 
target_link_libraries(Jpeg_to_values liblept168 libjpeg8c-static-mtdll) 

add_custom_command(
     TARGET Jpeg_to_values POST_BUILD 
     COMMAND ${CMAKE_COMMAND} -E copy_if_different 
     "${PROJECT_SOURCE_DIR}/leptonica/lib/liblept168.dll" 
     "$<TARGET_FILE_DIR:Jpeg_to_values>") 
関連する問題