使用Make编译OpenGL项目时遇libglut.so目标缺失错误求助
解决CMake链接GLUT库时的Make错误
问题原因
你直接在target_link_libraries中指定了.so文件的路径,CMake会将这个文件视为需要构建的目标文件,但libglut.so是预编译好的库,没有对应的构建规则,因此make会报错找不到生成它的规则。
解决方案
方案1:使用CMake的find_package自动查找系统库(推荐)
这是跨平台的标准做法,CMake会自动定位系统中的GLUT库及其头文件:
修改你的CMakeLists.txt:
cmake_minimum_required(VERSION 3.7) project(opengl C) include_directories(headers) # 查找GLUT库 find_package(GLUT REQUIRED) # 添加GLUT的头文件目录 include_directories(${GLUT_INCLUDE_DIR}) add_executable(main main.c) # 链接GLUT库 target_link_libraries(main ${GLUT_LIBRARIES})
方案2:手动导入本地的libglut.so(适用于自定义编译的库)
如果你的libglut.so是自己编译的、不在系统默认路径下的库,可以将其声明为导入目标,告诉CMake这是一个已存在的库:
cmake_minimum_required(VERSION 3.7) project(opengl C) include_directories(headers) add_executable(main main.c) # 声明导入的GLUT库 add_library(glut SHARED IMPORTED) # 指定库文件的路径 set_target_properties(glut PROPERTIES IMPORTED_LOCATION ${CMAKE_CURRENT_SOURCE_DIR}/libglut.so ) # 链接导入的库 target_link_libraries(main glut)
验证步骤
- 删除原有的构建目录(比如
build/) - 重新执行:
cmake . make
内容的提问来源于stack exchange,提问作者gronk
相关产品推荐
相关产品推荐

