【问题标题】:How to link static libraries in cmake如何在cmake中链接静态库
【发布时间】:2019-12-09 14:10:47
【问题描述】:

我正在尝试在我的项目中链接 GLFW。有我的项目结构的截图:

这是我的 CMakeLists.txt:

cmake_minimum_required(VERSION 3.15)
project(testo)

set(CMAKE_CXX_STANDARD 17)

add_executable(testo main.cpp)
add_library(glfw3 STATIC main.cpp)

include_directories(lib/glfw/include/)

find_library(GLFW glfw3 lib/glfw/lib)
target_link_libraries(testo LINK_PUBLIC ${GLFW})

但是,当我尝试在 clion 中运行项目时,它给了我错误:

====================[ Build | testo | Debug ]===================================
"C:\Program Files\JetBrains\CLion 2019.2.5\bin\cmake\win\bin\cmake.exe" --build C:\Users\Student\testo\cmake-build-debug --target testo -- -j 2
[ 50%] Linking CXX executable testo.exe
CMakeFiles\testo.dir/objects.a(main.cpp.obj): In function `main':
C:/Users/Student/testo/main.cpp:5: undefined reference to `glfwInit'
collect2.exe: error: ld returned 1 exit status
mingw32-make.exe[3]: *** [CMakeFiles\testo.dir\build.make:87: testo.exe] Error 1
mingw32-make.exe[2]: *** [CMakeFiles\Makefile2:77: CMakeFiles/testo.dir/all] Error 2
mingw32-make.exe[1]: *** [CMakeFiles\Makefile2:84: CMakeFiles/testo.dir/rule] Error 2
mingw32-make.exe: *** [Makefile:117: testo] Error 2

【问题讨论】:

  • 请将您的代码和错误直接粘贴到问题中
  • 这能回答你的问题吗? Linking GLEW with CMake。基本上应该是:target_link_libraries(testo LINK_PUBLIC ${GLEW_LIBRARIES}).
  • 将 GLFW 更改为 GLFW_LIBRARIES 无效。同样的错误。

标签: c++ cmake 3d clion glfw


【解决方案1】:

这里有一些github example
这是一些 SO question you are duplicating

基于此,它应该如下所示:

cmake_minimum_required(VERSION 3.15)
project(testo)

set(CMAKE_CXX_STANDARD 17)

find_package(GLEW REQUIRED)

add_executable(testo main.cpp)
target_link_libraries(testo PUBLIC ${GLEW_LIBRARIES})
target_include_directories(testo PUBLIC ${GLEW_INCLUDE_DIRS})

【讨论】:

    【解决方案2】:

    我认为这与 linux 添加 "lib***.a" [pre/post]fix 到 lib 文件名有关。

    尝试将您的lib/glfw/lib 目录添加到您的link_directories(),就像您对include_dicrectories() 所做的那样。

    另外,add_library() 指定您尝试自己编译glfw3,但您尝试做的只是链接它。我已经为你删除了。

    cmake_minimum_required(VERSION 3.15)
    project(testo)
    
    set(CMAKE_CXX_STANDARD 17)
    
    add_executable(testo main.cpp)
    
    include_directories(lib/glfw/include/)
    link_directories(lib/glfw/lib)
    
    target_link_libraries(testo LINK_PUBLIC glfw3)
    

    【讨论】:

    • 这个答案比有问题的解决方案更糟糕(实际上只是包含一个错字)。您的解决方案是特定于平台的。
    • 这对我不起作用。paste.dimdev.org/evayuxaxeg.makefile
    • 尝试从glfw.org/download.html 安装 GLFW 二进制文件,然后尝试像这样获取包:find_package(glfw3 3.3 REQUIRED) 并与target_link_libraries(testo glfw) 一起使用
    猜你喜欢
    • 1970-01-01
    • 2016-05-30
    • 2018-03-30
    • 1970-01-01
    • 1970-01-01
    • 2017-03-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多