You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

执行make命令后出现undefined reference错误,vcpkg库链接异常

问题解决思路与修正方案

核心错误原因

你的编译错误分为三类:

  1. GLFW函数未定义:imgui_impl_glfw.cpp调用了GLFW的API,但你没有在CMake中找到并链接GLFW库。
  2. ImGui内部函数未定义:你只添加了imgui.cpp和imgui_impl_glfw.cpp,缺少ImGui核心实现文件(如imgui_draw.cpp、imgui_widgets.cpp),这些文件包含StyleColorsDark、InputText等函数的实现。
  3. 依赖查找方式错误:手动用find_path/find_library无法保证找到vcpkg安装的库,可能误链接系统库或找不到正确文件。

步骤1:确保vcpkg已安装所需库

先执行vcpkg安装命令,确保所有依赖都来自vcpkg:

vcpkg install opengl glfw3 assimp glad

步骤2:修正CMakeLists.txt

以下是修改后的完整配置,关键问题已修复:

# 必须放在最开头,确保vcpkg接管依赖查找
set(CMAKE_TOOLCHAIN_FILE "/home/ubuntu-user/Desktop/flight-simulator/vcpkg/scripts/buildsystems/vcpkg.cmake")

cmake_minimum_required(VERSION 3.12)

set(PROJECT_NAME Simulator)
project(${PROJECT_NAME})

# 用vcpkg的find_package统一管理依赖,确保使用vcpkg库而非系统库
find_package(OpenGL REQUIRED)
find_package(glfw3 REQUIRED)
find_package(glad REQUIRED)
find_package(assimp REQUIRED)

# ImGui配置:补全所有核心源文件
set(IMGUI_DIR ./libs/imgui-implot)
add_library(imgui STATIC 
    ${IMGUI_DIR}/imgui.cpp
    ${IMGUI_DIR}/imgui_draw.cpp
    ${IMGUI_DIR}/imgui_widgets.cpp
    ${IMGUI_DIR}/imgui_tables.cpp
    ${IMGUI_DIR}/imgui_impl_glfw.cpp
    # 不需要demo的话可以注释下面一行
    # ${IMGUI_DIR}/imgui_demo.cpp
)

# ImGui依赖GLFW,必须链接到imgui库
target_link_libraries(imgui PRIVATE glfw)
# 暴露ImGui的头文件给主项目
target_include_directories(imgui PUBLIC ${IMGUI_DIR})

# 手动列出源文件(不推荐用GLOB,避免意外引入文件)
set(SOURCES
    src/Data.cpp
    src/Frames.cpp
    src/Model.cpp
    src/main.cpp
)

add_executable(${PROJECT_NAME} ${SOURCES})

# 链接所有依赖库到可执行文件
target_link_libraries(${PROJECT_NAME} PRIVATE
    imgui
    OpenGL::GL
    glad::glad
    assimp::assimp
)

关键修改点说明

  • 工具链文件位置:移到最开头,确保CMake在处理任何配置前加载vcpkg工具链,优先使用vcpkg中的库。
  • 依赖查找方式:用find_package替代手动查找,vcpkg会自动处理头文件路径、库文件路径,避免系统库干扰。
  • 补全ImGui源文件:添加imgui_draw.cpp、imgui_widgets.cpp、imgui_tables.cpp,解决ImGui内部函数未定义问题。
  • 链接GLFW到ImGui:imgui_impl_glfw.cpp依赖GLFW,必须将GLFW链接到ImGui静态库,否则会出现GLFW函数未定义错误。
  • 现代CMake写法:用target_include_directories和目标别名(如OpenGL::GL)替代全局头文件和手动库路径,配置更清晰可靠。

验证方法

  1. 删除原build目录,重新创建并进入:
rm -rf build && mkdir build && cd build
  1. 重新执行cmake和make:
cmake ..
make

内容的提问来源于stack exchange,提问作者deepfreeze

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 03:55:14