CMake C++Project librealsense:使用CLion对OpenGL的未定义引用



我正在尝试在Ubuntu 20.04上集成librealsense C++CLion项目。
在终端中单独编译Librealsenses正如预期的那样。

项目看起来是这样的:

RS_Pipeline。├──建筑├──main.cpp├──CMakeLists.txt└──librealsense//集成的lib├──CMakeLists.txt├──示例中使用的第三方//库,如GLFW和GLAD├──示例//|├──example.hp//使用类生成OpenGL窗口└── ...

基本文件夹中的CMakeLists.txt看起来相当简单:

cmake_minimum_required(3.2版)项目(RS_Pipeline LANGUAGES CXX C)设置(CMAKE_CXX_STANDARD 11)集合(OpenGL_GL_PREFERERENCE LEGACY)add_executable(RS_Pipeline main.cpp librealsense/examples/example.hpp)add_subdirectory(librealsense)target_link_libraries(${PROJECT_NAME}realsense2)

一旦我试图将子模块包含到我的CLion项目中,我就会收到大量的:main.cpp:(.text+0x23c): undefined reference to glViewport错误消息,并且在基本目录中构建我的main.cpp失败。

不知何故#include <librealsense2/rs.hpp> #include "librealsense/examples/example.hpp"工作良好,甚至智能感应也能找到所有功能。

PLUS: librealsense库中包含的示例也可以毫无问题地编译。(它们使用完全相同的#include "librealsense/examples/example.hpp"

看起来,CLion只是没有在我自己的main.cpp中找到正确的openGL。如果我把它包括在example.hpp.中

==============================[生成|RS_Pipeline|Release]===========================/snap/clion/175/bin/cmake/linux/bin/cmake--构建/home/lukas/Development/Cp/RS_Pipeline/cmake构建发布--目标RS_Pipeline[0/1]正在重新运行CMake。。。--正在检查internet连接。。。--已识别Internet连接--信息:REALSENSE_VERSION_STRING=2.50.0--设置Unix配置--正在构建启用了libcurl--使用RS2_USE_V4L2_BACKEND--找不到apriltag(缺少:APRITAG_INC APRITAG_LIB)--无法找到apriltag库,正在跳过姿势apriltag示例--检查添加到realsense查看器的更新功能--检查添加到realsense深度质量的更新功能--带TM2的建筑--正在获取推荐的固件:--D4XX_FW_版本:5.13.0.50--SR3XX_FW_版本:3.26.1.0--T26X_FW_VERSION:0.2.0.951--L51X_FW_VERSION:1.5.8.1--L53X_FW_版本:3.5.5.1--https://librealsense.intel.com/Releases/RS4xx/FW/D4XX_FW_Image-5.13.0.50.bin--下载固件0;D4XX_FW_Image-5.13.0.50.bin的"提前返回;文件已存在,需要SHA1哈希"--https://librealsense.intel.com/Releases/SR300/FW/SR3XX_FW_Image-3.26.1.0.bin--下载固件0;SR3XX_FW_Image-3.26.1.0.bin的"提前返回;文件已存在,需要SHA1哈希"--https://librealsense.intel.com/Releases/TM2/FW/target/0.2.0.951/target-0.2.0.951.mvcmd--下载固件0;target-0.2.0.951.mvcmd的"提前返回;文件已存在,需要SHA1哈希"--https://librealsense.intel.com/Releases/L5xx/FW/L51X_FW_Image-1.5.8.1.bin--下载固件0;L51X_FW_Image-1.5.8.1.bin的"提前返回;文件已存在,需要SHA1哈希"--https://librealsense.intel.com/Releases/L5xx/FW/L53X_FW_Image-3.5.5.1.bin--下载固件0;L53X_FW_Image-3.5.5.1.bin的"提前返回;文件已存在,需要SHA1哈希"--配置完成--生成已完成--构建文件已写入:/home/lukas/Development/Cp/RS_Pipeline/cmake构建版本[1/1]链接CXX可执行文件RS_Pipeline失败:RS_Pipeline:&&/usr/bin/c++-O3-DNDEBUG-rdynamic CMakeFiles/RS_Pipeline.dir/main.cpp.o-o RS_Pipeline-Wl,-rpath,/home/lukas/Development/Cp/RS_Pipeline/cmake build release/libralsense librealsense/libralssense2.so.2.50.0-lglfw&&://usr/bin/ld:CMakeFiles/RS_Pipeline.dir/main.cpp.o:在函数"set_viewport(rect const&)"中:main.cpp:(.text+0x23c):对"glViewport"的未定义引用/usr/bin/ld:main.cpp:(.text+0x241):对"glLoadIdentity"的未定义引用/usr/bin/ld:main.cpp:(.text+0x24b):对"glMatrixMode"的未定义引用//usr/bin/ld:CMakeFiles/RS_Pipeline.dir/main.cpp.o:在函数`draw_pointcloud(float,float,glfw_state&,rs2::points&)'中:main.cpp:(.text+0x2bb):对"glLoadIdentity"的未定义引用/usr/bin/ld:main.cpp:(.text+0x2c5):对"glPushAttrib"的未定义引用/usr/bin/ld:main.cpp:(.text+0x2e0):对"glClearColor"的未定义引用/usr/bin/ld:main.cpp:(.text+0x2ea):对"glClear"的未定义引用/usr/bin/ld:main.cpp:(.text+0x2f4):对"glMatrixMode"的未定义引用/usr/bin/ld:main.cpp:(.text+0x2f9):对"glPushMatrix"的未定义引用/usr/bin/ld:main.cpp:(.text+0x32a):对"gluPerspective"的未定义引用/usr/bin/ld:main.cpp:(.text+0x334):对"glMatrixMode"的未定义引用/usr/bin/ld:main.cpp:(.text+0x39):对"glPushMatrix"的未定义引用/usr/bin/ld:main.cpp:(.text+0x36c):对"gluLookAt"的未定义引用/usr/bin/ld:main.cpp:(.text+0x394):对"glTranslatef"的未定义引用/usr/bin/ld:main.cpp:(.text+0x3b2):对"glRotated"的未定义引用/usr/bin/ld:main.cpp:(.text+0x3cf):对"glRotated"的未定义引用/usr/bin/ld:main.cpp:(.text+0x3e3):对"glTranslatef"的未定义引用/usr/bin/ld:main.cpp:(.text+0x3f6):对"glPointSize"的未定义引用/usr/bin/ld:main.cpp:(.text+0x400):对"glEnable"的未定义引用/usr/bin/ld:main.cpp:(.text+0x40a):对"glEnable"的未定义引用/usr/bin/ld:main.cpp:(.text+0x417):对"glBindTexture"的未定义引用/usr/bin/ld:main.cpp:(.text+0x437):对"glTexParameterfv"的未定义引用/usr/bin/ld:main.cpp:(.text+0x44b):对"glTexParameteri"的未定义引用/usr/bin/ld:main.cpp:(.text+0x45f):对"glTexParameteri"的未定义引用/usr/bin/ld:main.cpp:(.text+0x466):对"glBegin"的未定义引用/usr/bin/ld:main.cpp:(.text+0x516):对"glEnd"的未定义引用/usr/bin/ld:main.cpp:(.text+0x51b):对"glPopMatrix"的未定义引用/usr/bin/ld:main.cpp:(.text+0x525):对"glMatrixMode"的未定义引用/usr/bin/ld:main.cpp:(.text+0x52a):对"glPopMatrix"的未定义引用/usr/bin/ld:main.cpp:(.text+0x52f):对"glPopAttrib"的未定义引用/usr/bin/ld:main.cpp:(.text+0x558):对"glVertex3fv"的未定义引用/usr/bin/ld:main.cpp:(.text+0x566):对"glTexCoord2fv"的未定义引用/usr/bin/ld:CMakeFiles/RS_Pipeline.dir/main.cpp.o:在函数`draw_pointcloud_wrt_world(float,float,glfw_state&,rs2::points&,rs2_pose&,float*,std::vector>&)'中:main.cpp:(.text+0x98b):对"glLoadIdentity"的未定义引用/usr/bin/ld:main.cpp:(.text+0x995):对"glPushAttrib"的未定义引用/usr/bin/ld:main.cpp:(.text+0x9b0):对"glClearColor"的未定义引用/usr/bin/ld:main.cpp:(.text+0x9ba):对"glClear"的未定义引用/usr/bin/ld:main.cpp:(.text+0x9c4):对"glMatrixMode"的未定义引用/usr/bin/ld:main.cpp:(.text+0x9c9):对"glPushMatrix"的未定义引用/usr/bin/ld:main.cpp:(.text+0x9fa):对"gluPerspective"的未定义引用/usr/bin/ld:main.cpp:(.text+0xa04):对"glMatrixMode"的未定义引用/usr/bin/ld:main.cpp:(.text+0xa09):对"glPushMatrix"的未定义引用/usr/bin/ld:main.cpp:(.text+0x2f):对"glTranslatef"的未定义引用/usr/bin/ld:main.cpp:(.text+0xa4a):对"glRotated"的未定义引用/usr/bin/ld:main.cpp:(.text+0xa65):对"glRotated"的未定义引用/usr/bin/ld:main.cpp:(.text+0xa79):对"glTranslatef"的未定义引用/usr/bin/ld:main.cpp:(.text+0xa83):对"glEnable"的未定义引用/usr/bin/ld:main.cpp:(.text+0xa90):对"glLineWidth"的未定义引用/usr/bin/ld:main.cpp:(.text+0xa9a):对"glBegin"的未定义引用/usr/bin/ld:main.cpp:(.text+0xac4):对"glColor3f"的未定义引用/usr/bin/ld:main.cpp:(.text+0xad8):对"glVertex3f"的未定义引用/usr/bin/ld:main.cpp:(.text+0xae2):对"glEnd"的未定义引用/usr/bin/ld:main.cpp:(.text+0xaef):对"glLineWidth"的未定义引用/usr/bin/ld:main.cpp:(.text+0xb02):对"glColor3f"的未定义引用/usr/bin/ld:main.cpp:(.text+0x2f):对"glMultMatrixf"的未定义引用/usr/bin/ld:main.cpp:(.text+0xb37):对"glMultMatrixf"的未定义引用/usr/bin/ld:main.cpp:(.text+0xb4a):对"glPointSize"的未定义引用/usr/bin/ld:main.cpp:(.text+0xb54):对"glEnable"的未定义引用/usr/bin/ld:main.cpp:(.text+0xb5e):对"glEnable"的未定义引用/usr/bin/ld:main.cpp:(.text+0xb71):对"glBindTexture"的未定义引用/usr/bin/ld:main.cpp:(.text+0xb91):对"glTexParameterfv"的未定义引用/usr/bin/ld:main.cpp:(.text+0xba5):对"glTexParameteri"的未定义引用/usr/bin/ld:main.cpp:(.text+0xbb9):对"glTexParameteri"的未定义引用/usr/bin/ld:main.cpp:(.text+0xbc0):对"glBegin"的未定义引用/usr/bin/ld:main.cpp:(.text+0xc76):对"glEnd"的未定义引用/usr/bin/ld:main.cpp:(.text+0xc7b):对"glPopMatrix"的未定义引用/usr/bin/ld:main.cpp:(.text+0xc85):对"glMatrixMode"的未定义引用/usr/bin/ld:main.cpp:(.text+0xc8a):对"glPopMatrix"的未定义引用/usr/bin/ld:main.cpp:(.text+0xc8f):对"glPopAttrib"的未定义引用/usr/bin/ld:main.cpp:(.text+0xcc0):对"glVertex3fv"的未定义引用/usr/bin/ld:main.cpp:(.text+0xce):对"glTexCord2fv"的未定义引用//usr/bin/ld:CMakeFiles/RS_Pipeline.dir/main.cpp.o:在函数"set_viewport(rect const&)"中:main.cpp:(.text+0x27b):对"glOrtho"的未定义引用collect2:错误:ld返回1退出状态ninja:生成已停止:子命令失败

示例都包括这个文件,而您没有:

find_package(OpenGL REQUIRED)
set(DEPENDENCIES realsense2 glfw ${OPENGL_LIBRARIES})

这使得CCD_ 4库依赖于GLFW和OpenGL堆栈。

将以下内容添加到您的CMakeLists.txt中:

find_package(OpenGL REQUIRED)
target_link_libraries(${PROJECT_NAME} glfw OpenGL::GL )

@Botje非常感谢,太快了!现在它正在使用以下CMakeLists:

cmake_minimum_required(3.2版)项目(RS_Pipeline LANGUAGES CXX C)设置(CMAKE_CXX_STANDARD 11)集合(OpenGL_GL_PREFERERENCE LEGACY)find_package(需要OpenGL)add_executable(RS_Pipeline main.cpp librealsense/examples/example.hpp)add_subdirectory(librealsense)target_link_libraries(${PROJECT_NAME}真实感2glfw OpenGL::GLglfw OpenGL::GLU)

看起来这个主题已经可以关闭了。

最新更新