2017-12-27 44 views
0

나는 C++ 라이브러리가 (retdec-CPP)와 비주얼 스튜디오 2015를 사용하고 (나는 비주얼 스튜디오 2015 프로젝트에서이 라이브러리를 사용하려면이 특정 버전을 Cmake 3.10.0내가 만든 cmake

를 사용하여 설치 필요하다). 디버그 및 릴리스를 별도로 빌드해야하므로 this guide을 따랐습니다.

project(prog CXX) 
cmake_minimum_required(VERSION 3.6) 

find_package(Threads) 


set(RETDEC_SRC_DIR "C:/Users/kkkkk/Desktop/retdec-cpp") 
set(RETDEC_BUILD_DIR "C:/Users/kkkkk/Desktop/retdec-cpp/build") 

#added : 
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/bin") 
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/lib") 
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/lib") 
# 

include_directories(SYSTEM "${RETDEC_SRC_DIR}/include") 
link_directories(
    "${RETDEC_BUILD_DIR}/debug/src/retdec" 
    "${RETDEC_BUILD_DIR}/debug/third_party/src/cpp-netlib-build/libs/network/src" 
    "${RETDEC_BUILD_DIR}/debug/src/json-cpp-build/src/lib_json" 
    "${RETDEC_BUILD_DIR}/release/src/retdec" 
    "${RETDEC_BUILD_DIR}/release/third_party/src/cpp-netlib-build/libs/network/src" 
    "${RETDEC_BUILD_DIR}/release/src/json-cpp-build/src/lib_json" 

) 


add_executable(prog prog.cpp) 
target_link_libraries(
retdec 
    boost_filesystem 
    boost_system 
    boost_thread 
    boost_chrono 
    boost_date_time 
    boost_atomic 
    ssl 
    crypto 
    cppnetlib-uri 
    cppnetlib-client-connections 
    jsoncpp 
    ${CMAKE_THREAD_LIBS_INIT} 

) 

때 :이 그것이 지금의 모습

는 지금은 Cmake를 사용하여 내 비주얼 스튜디오 프로젝트에서 ++ 라이브러리이 C를 사용하려면,하지만 난 CmakeLists.txt

을 쓰는 데 문제
LNK1104 : 나는이 오류를 표시에 유지, 비주얼 스튜디오를 구축 파일을 열 수 없습니다 retdec.lib

뭔가 잘못에 분명히 있습니다 내 CMakeLists.

Cmake를 사용하여 Visual Studio 2015 프로젝트에이 라이브러리를 포함하려면 어떻게해야합니까?

+0

링크 디렉토리 중 하나에'retdec.lib'이 있습니까? 나는 그것이 사실 이길 것이라고 기대하지 않는다. 대신 소스 폴더처럼 보입니다. – drescherjm

+0

기존 대상에 대해 target_link_libraries를 호출해야합니다. 즉, 첫 번째 인수로'prog'를 사용하여 호출해야합니다. – vre

+0

해당 라이브러리가 폴더에있는 경우 32 비트와 64 비트가 혼합되어있을 수 있습니다. – drescherjm

답변

0

오류의 문제 : 당신이 link_directories() 호출에 지정된 디렉토리의 모든 당신의 내부에 연결을 시도하고 retdec.lib를 포함하지 않는 것 사실에서

LNK1104:cannot open file retdec.lib

결과 target_link_libraries() 기능.

해결책은 간단하다 :

  • retdec.lib의 위치를 ​​찾아 이미 연결 한 폴더 중 하나에 배치합니다 (I 당신의 link_directories에서 항목을 발견은 가치를 호출 : "${RETDEC_BUILD_DIR}/release/src/retdec"이이었다 의도로? 이름으로 판단하면 lib 디렉토리가 아닌 src 파일과 디렉토리가있는 것 같습니다. 대신 "${RETDEC_BUILD_DIR}/release/lib"과 같은 것을 찾으십니까?).
  • retdec.lib의 위치를 ​​찾은 다음 해당 디렉토리를 link_directories() 목록에 추가로 추가 할 수 있습니다.