【问题标题】:CMake linking glfw3 lib errorCMake链接glfw3 lib错误
【发布时间】:2016-09-01 08:40:11
【问题描述】:

我正在使用 CLion,并且正在使用 glfw3 库编写程序。(http://www.glfw.org/docs/latest/)

我已正确安装并正确执行了 lib,其中包含 .a 和 .h 文件:

/usr/local/lib/libglfw3.a

/usr/local/include/.h(all files)

我现在正在尝试使用该库,但出现链接器错误:

undefined reference to 'glViewport'等等等等我正在使用的所有功能

我在make文件中添加了lib路径,我不明白我做错了什么,我的CMakeLists.txt看起来像这样:

cmake_minimum_required(VERSION 3.6)
project(testing)

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

set(SOURCE_FILES main.cpp examples.h)

add_executable(testing ${SOURCE_FILES})
target_link_libraries(testing /usr/local/lib/libglfw3.a)
target_link_libraries(testing /usr/local/lib/libTest.a)

target_link_libraries(testing pthread)

我们将不胜感激。

谢谢!

【问题讨论】:

    标签: linux c++11 linker cmake glfw


    【解决方案1】:

    您不应将绝对路径硬编码到 CMake 文件中。这使得 CMake 无用。

    documentation of GLFW on how to link against it中,明确写了:

    find_package(glfw3 3.2 REQUIRED)
    find_package(OpenGL REQUIRED)
    
    target_include_directories(myapp PUBLIC ${OPENGL_INCLUDE_DIR})
    target_link_libraries(myapp
                          glfw
                          ${OPENGL_gl_LIBRARY})
    

    另外,你可以替换

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

    set(CMAKE_CXX_STANDARD 11)
    set(CMAKE_CXX_STANDARD_REQUIRED ON)
    

    CMake 会根据当前使用的编译器自动找出正确的编译器标志。

    【讨论】:

    • 您可能想要添加一行告诉 OP为什么 OP 会收到链接器错误,而不仅仅是显示如何修复它。
    • @Torbjörn 硬编码的字符串不会改变任何东西。可能是openGL需要不同的模块。但从文档依赖项中,我添加了我需要的一切
    • @Mumfordwiz 除了链接实际的 OpenGL 库... :)
    • 哇,现在完全不同了。我已经更正了答案。我不太确定在target_link_libraries 命令中是glfw 还是glfw3。两者之一应该可以工作。
    • 我猜找不到包,因为我使用无效参数调用 target_include_directories。我之前尝试过遵循该指南,但它不起作用
    猜你喜欢
    • 2021-11-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多