【问题标题】:Using visual studio 2015 with cmake将 Visual Studio 2015 与 cmake 一起使用
【发布时间】:2018-06-08 10:49:38
【问题描述】:

我有一个 c++ 库 (retdec-cpp),我使用 Cmake 3.10.0 构建和安装了它

我想在 Visual Studio 2015 项目中使用这个库(需要这个特定版本)。我知道需要单独构建调试和发布,所以我关注了this guide

现在我想使用 Cmake 在我的 Visual Studio 项目中使用这个 c++ 库,但是我在编写 CmakeLists.txt 时遇到了麻烦

这就是它现在的样子:

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}

)

当我在 Visual Studio 中构建它时,它一直显示此错误:
LNK1104:cannot open file retdec.lib

我的 CMakeLists 显然有问题。

如何使用 Cmake 将此库包含在我的 Visual Studio 2015 项目中?

【问题讨论】:

  • retdec.lib 在您的链接目录之一中吗?我不希望会是这样。它们看起来像源文件夹。
  • 您需要为现有目标调用 target_link_libraries,即您应该使用prog 作为第一个参数来调用它。
  • 如果文件夹中存在该库,那么您可能正在混合使用 32 位和 64 位。
  • 我确实有 prog 作为第一个参数,但由于某种原因被删掉了。
  • 文件夹中不存在该库

标签: visual-studio-2015 cmake linker-errors


【解决方案1】:

错误的问题:

LNK1104: 无法打开文件 retdec.lib

您在link_directories() 调用中指定的所有目录似乎都不包括您试图链接到target_link_libraries() 函数内部的retdec.lib

解决方法很简单:

  • 找到 retdec.lib 的位置,并将其放置在您已链接的文件夹之一中(我在您的 link_directories 调用中发现了一项价值:"${RETDEC_BUILD_DIR}/release/src/retdec" 这是故意的吗?从名称来看,似乎它是包含 src 文件的目录,而不是库。您在哪里寻找类似 @​​987654325@ 的东西?)。
  • 或者,您可以找到 retdec.lib 的位置,然后将该目录添加到您的 link_directories() 列表中。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-09-30
    • 2016-09-19
    • 2017-09-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-24
    相关资源
    最近更新 更多