CMake 链接 glfw3 库错误
CMake linking glfw3 lib error
我正在使用 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)
任何帮助将不胜感激。
谢谢!
您不应将绝对路径硬编码到您的 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 会根据当前使用的编译器自动找出正确的编译器标志。
我正在使用 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)
任何帮助将不胜感激。
谢谢!
您不应将绝对路径硬编码到您的 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 会根据当前使用的编译器自动找出正确的编译器标志。