使用CMake链接OpenGL和GLUT库

5

我写了一个C++项目,其中使用了OpenGL和Glut库。

当我从命令行编译它时,一切都运行良好。这是一个示例:

g++ -o prog source.cpp -lGL -lGLU -lglut --std=c++11 -L /usr/lib/nvidia-331/

但是当我想在QtCreator中使用CMake时:
project(proj)
cmake_minimum_required(VERSION 2.8)

aux_source_directory(. SRC_LIST)
add_executable(${PROJECT_NAME} ${SRC_LIST})
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -lGL -lGLU -lglut -L /usr/lib/nvidia-331/") 

我收到了这样的信息:错误:未定义对`glColor3f'的引用等等。

有人能帮助我吗?


find_package(OpenGL) - ratchet freak
我认为add_executable需要在set之后定位。编辑:但我可能将其与set_target_properties混淆了。 - PeterT
1个回答

5
project(proj)
cmake_minimum_required(VERSION 2.8)

find_package(OpenGL)
find_package(GLUT)

aux_source_directory(. SRC_LIST)
add_executable(${PROJECT_NAME} ${SRC_LIST})
target_link_libraries(
    ${PROJECT_NAME}
    ${OPENGL_gl_LIBRARY}
    ${GLUT_LIBRARIES} )

注意:您不应将项目名称用于可执行文件。

仍然无法工作:'error: [cmake_check_build_system] Error 1'。 据我所知,参数“-L /usr/lib/nvidia-331/”对程序正常工作是必要的。默认的OpenGL库存在问题。 - Bender
2
@Bender:请和我说话:“我永远不会使用绝对路径或非默认路径链接到libGL.so!”如果您无法在系统上正确链接到libGL.so,则应该修复。我不太确定您使用aux_source_directory是否有效或明智。但是,我从自己的一个OpenGL项目中直接获取了CMake的其余部分,因此在正确配置的系统上,它应该可以工作。 - datenwolf
对于未来的用户,您应该将-L路径添加到变量LD_LIBRARY_PATH中,例如:export LD_LIBRARY_PATH=/home/sk/anaconda3/lib/:$LD_LIBRARY_PATH,将在LD_LIBRARY_PATH前面添加路径/home/sk/anaconda3/lib/。 - saurabheights
1
@saurabheights:不要这样做!这会干扰GLvnd或安装程序设置的符号链接。您绝不能为系统级库指定额外的库搜索路径。否则,像VirtualGL这样需要挂钩或注入的东西就会变得棘手。**不要这样做!** - datenwolf
所有内容都是使用apt-get安装的,包括freeglut3和freeglut3-dev。 - saurabheights
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接