我正在嘗試在 Ubuntu 20.04 上集成librealsense C CLion 專案。
在終端中單獨編譯 Librealsense 可以按預期作業。
該專案如下所示:
RS_Pipeline
.
├──構建
├── main.cpp
├── CMakeLists.txt
└── librealsense // 集成庫
├── CMakeLists.txt
├── 第三方 // 示例中使用的 GLFW 和 GLAD 等庫
├── 例子 //
| ├── example.hpp // 帶類生成OpenGL Window
└── ……
基本檔案夾中的 CMakeLists.txt 看起來相當簡單:
cmake_minimum_required(版本 3.2)
專案(RS_Pipeline LANGUAGES CXX C)
設定(CMAKE_CXX_STANDARD 11)
設定(OpenGL_GL_PREFERENCE LEGACY)
add_executable(RS_Pipeline main.cpp librealsense/examples/example.hpp)
添加子目錄(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_管道 | 發布 ]============================ /snap/clion/175/bin/cmake/linux/bin/cmake --build /home/lukas/Development/Cpp/RS_Pipeline/cmake-build-release --target RS_Pipeline [0/1] 重新運行 CMake... -- 正在檢查網路連接... -- Internet 連接已識別 -- 資訊:REALSENSE_VERSION_STRING=2.50.0 -- 設定Unix配置 -- 啟用構建 libcurl -- 使用 RS2_USE_V4L2_BACKEND -- 找不到 apriltag(缺少:APRILTAG_INC APRILTAG_LIB) -- 無法找到apriltag 庫,跳過pose-apriltag 示例 -- 檢查添加到 realsense-viewer 的更新功能 -- 檢查添加到實感深度質量的更新功能 -- 使用 TM2 構建 -- 獲取推薦韌體: -- D4XX_FW_VERSION: 5.13.0.50 -- SR3XX_FW_VERSION: 3.26.1.0 -- T26X_FW_VERSION: 0.2.0.951 -- L51X_FW_VERSION: 1.5.8.1 -- L53X_FW_VERSION: 3.5.5.1 -- https://librealsense.intel.com/Releases/RS4xx/FW/D4XX_FW_Image-5.13.0.50.bin -- 下載韌體 0;“提前回傳;檔案已經存在,具有預期的 SHA1 哈希值”適用于 D4XX_FW_Image-5.13.0.50.bin -- 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;“提前回傳;目標 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/Cpp/RS_Pipeline/cmake-build-release [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/Cpp/RS_Pipeline/cmake-build-release /librealsense librealsense/librealsense2.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 0x339): 對`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 0xa2f): 對 `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 0xb2f): 對 `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 0xcce): 對`glTexCoord2fv'的未定義參考 /usr/bin/ld: CMakeFiles/RS_Pipeline.dir/main.cpp.o: 在函式‘set_viewport(rect const&)’中: main.cpp:(.text 0x27b):對`glOrtho'的未定義參考 collect2:錯誤:ld 回傳 1 個退出狀態 忍者:構建停止:子命令失敗。
uj5u.com熱心網友回復:
示例都包含此檔案,而您不包含:
find_package(OpenGL REQUIRED)
set(DEPENDENCIES realsense2 glfw ${OPENGL_LIBRARIES})
這使得realsense2庫依賴于 GLFW 和您的 OpenGL 堆疊。
將以下內容添加到您的 CMakeLists.txt:
find_package(OpenGL REQUIRED)
target_link_libraries(${PROJECT_NAME} glfw OpenGL::GL )
uj5u.com熱心網友回復:
@Botje 非常感謝,這很快!現在它正在使用以下 CMakeLists:
cmake_minimum_required(版本 3.2)
專案(RS_Pipeline LANGUAGES CXX C)
設定(CMAKE_CXX_STANDARD 11)
設定(OpenGL_GL_PREFERENCE LEGACY)
find_package(需要OpenGL)
add_executable(RS_Pipeline main.cpp librealsense/examples/example.hpp)
添加子目錄(librealsense)
目標鏈接庫(${PROJECT_NAME}
實感2
glfw OpenGL::GL
glfw OpenGL::GLU
)
看起來這個話題已經可以關閉了。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/377412.html
上一篇:如何卸載標簽作業室?
