簡體   English   中英

如何在 C++ 的 librealsense 示例代碼項目“捕獲”中使用 GLFW 解決錯誤 LNK2019

[英]How can I solve error LNK2019 with GLFW in librealsense example code project "capture" for c++

我已經查看並嘗試了許多其他關於我的問題的帖子中提供的解決方案,但沒有一個對我有用。 所以我一直在做一個需要使用 librealsense 的項目,這個庫允許 realsense 相機用戶用他們的相機做很多事情。 為了更好地了解這個庫的潛力,我嘗試在 Visual Studio 2022 上使用 CMakeLists.txt 構建他們的一些示例(我不能擁有 Linux 操作系統)。 我成功構建並執行了第一個示例“Hello-Realsense”,因此我認為可以在 Visual Studio 上使用 CMakeList 進行構建。 然而,第二個項目( https://github.com/IntelRealSense/librealsense/tree/master/examples/capture )給了我 42 個未解決的外部,這里有一些:

[...]tuto_librealsense\2_capture\out\build\x64-Debug\LINK : warning LNK4098: defaultlib 'MSVCRT' conflicts with use of other libs; use /NODEFAULTLIB:library
[...]tuto_librealsense\2_capture\out\build\x64-Debug\rs-capture.cpp.obj : error LNK2019: unresolved external symbol __imp_glBegin referenced in function "void __cdecl draw_pointcloud(float,float,struct glfw_state &,class rs2::points &)" (?draw_pointcloud@@YAXMMAEAUglfw_state@@AEAVpoints@rs2@@@Z)
[...]tuto_librealsense\2_capture\out\build\x64-Debug\rs-capture.cpp.obj : error LNK2019: unresolved external symbol __imp_glBindTexture referenced in function "void __cdecl draw_pointcloud(float,float,struct glfw_state &,class rs2::points &)" (?draw_pointcloud@@YAXMMAEAUglfw_state@@AEAVpoints@rs2@@@Z)

如您所見,還有一個警告說我的操作系統庫和我嘗試鏈接的庫之間可能存在沖突。

這是我的項目組織的概述:我的 CMakeLists.txt、example.hpp 和 rs-capture.cpp

根據示例創建者,example.hpp 文件是必須包含在項目中的頭文件。 正是這個文件迫使我使用 GLFW 庫,我想我一定是鏈接不正確,盡管我遵循相同的邏輯,允許我正確構建 Hello-Realsense 項目,該項目將 .lib 文件放在 DEPENDENCIES 宏中和PATH_TO_HEADERS 宏中我的庫的頭文件。 我還從 lib-vc2022 文件夾中獲取了 glfw3.lib 文件,因為我的 Visual Studio 版本是 2022,但我承認這有點武斷。

cmake_minimum_required(VERSION 3.1.0)
project(RealsenseExamplesCapture)

add_executable(rs-capture rs-capture.cpp example.hpp)
set_property(TARGET rs-capture PROPERTY CXX_STANDARD 11)

set(DEPENDENCIES "C:/Program Files (x86)/Intel RealSense SDK 2.0/lib/x64/realsense2.lib" "C:/Program Files/GL/GLFWx64/lib-vc2022/glfw3.lib")
set(PATH_TO_HEADERS "C:/Program Files (x86)/Intel RealSense SDK 2.0/include/" "C:/Program Files/GL/GLFWx64/include/GLFW" "C:/Program Files (x86)/Intel RealSense SDK 2.0/samples")

target_link_libraries(rs-capture ${DEPENDENCIES})
INCLUDE_DIRECTORIES(${PATH_TO_HEADERS})
 
install(TARGETS rs-capture RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})

此外,我將 glfw3.dll 文件放在 C:\Windows\System32 目錄中,正如我在 WikiHow 教程中看到的那樣。

有人幫助了我 IRL,所以我將分享我新獲得的知識。 您可能知道,當出現“未解析的外部符號”錯誤時,這意味着編譯器找不到符號在哪里。 以下是解決此問題的步驟:

  1. 查找未找到的函數或符號的名稱。 例子 :

[...]\tuto_librealsense\2_capture\out\build\x64-Debug\rs-capture.cpp.obj: error LNK2019: unresolved external symbol gluPerspective referenced in function "void __cdecl draw_pointcloud(float,float,struct glfw_state &,class rs2::points &)" (?draw_pointcloud@@YAXMMAEAUglfw_state@@AEAVpoints@rs2@@@Z)

在這里你可以看到符號“draw_pointcloud”沒有被解析,這導致我們進入下一步:研究。

  1. 所以你首先在你的解決方案中搜索它。 就我而言,我在 example.hpp 中找到了它,它是一個函數定義:
void draw_pointcloud(float width, float height, glfw_state& app_state, rs2::points& points)
{
    if (!points)
        return;

    // OpenGL commands that prep screen for the pointcloud
    glLoadIdentity();
    glPushAttrib(GL_ALL_ATTRIB_BITS);

現在您可以看到它們是其他一些不是標准 C++ 語法的符號,例如 glLoadIdentity,因此您可以在 Internet 上搜索 glLoadIdentity:在我的情況下,我得到的第一個結果是 Microsoft 網站,因為它是本機 Windows 庫。 在這個頁面上,我發現這個函數屬於 Opengl32 庫,對應的文件是 Opengl32.lib,這導致我們進入下一步:

  1. 在您的 PC 上找到 .lib 文件或下載它。 在這種情況下,它是一個本機庫,因此您可以在C:\Program Files\C:\Program Files (x86)\中搜索它。 請注意,文件名末尾的 32 表示您在以 (x86) 結尾的目錄中搜索它,因為這意味着它是一個 32 位庫。

  2. 將 .lib 文件的位置提供給 CMakeLists.txt(或在 C++ 項目的屬性頁中)。 示例:我在 CMakeLists.txt 中修改的兩行:

set(DEPENDENCIES "C:/Program Files (x86)/Intel RealSense SDK 2.0/lib/x64/realsense2.lib" "C:/Program Files/GL/GLFWx64/lib-vc2022/glfw3.lib" "C:/Program Files (x86)/Windows Kits/10/Lib/10.0.19041.0/um/x64/OpenGL32.Lib"   "C:/Program Files (x86)/Windows Kits/10/Lib/10.0.19041.0/um/x64/GlU32.Lib")
set(PATH_TO_HEADERS "C:/Program Files (x86)/Intel RealSense SDK 2.0/include/" "C:/Program Files/GL/GLFWx64/include/GLFW" "C:/Program Files (x86)/Intel RealSense SDK 2.0/samples")

代碼輸出:D

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM