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

CMake同时引入OMPL与Assimp包出现未定义引用错误求解决

问题分析与解决方案

出现链接错误的核心原因是OMPL内部依赖Assimp,同时手动调用find_package(assimp)会导致CMake变量冲突,OMPL可能覆盖了Assimp的库路径或版本信息,使得链接时找不到正确的符号。

修正后的CMakeLists.txt(推荐现代CMake写法)

cmake_minimum_required(VERSION 3.10)
project(Project_Name)

# 先查找OMPL,它会自动处理自身的Assimp依赖
find_package(ompl REQUIRED)

# 使用CONFIG模式优先查找Assimp,避免与OMPL的内部依赖产生冲突
find_package(assimp REQUIRED CONFIG)

# 添加可执行文件
add_executable(AssimpTest testArea/AssimpTest.cpp)

# 链接OMPL和Assimp的命名目标(现代CMake推荐方式,自动传递包含目录和库)
target_link_libraries(AssimpTest
    PRIVATE
        ompl::ompl
        assimp::assimp
)

关键修改点说明

  1. 拼写错误修正:原文件中${ASSIMP_INLCUDE_DIR}存在拼写错误,改为正确的${ASSIMP_INCLUDE_DIR},但使用现代CMake目标后无需手动指定包含目录,目标会自动传递。
  2. 使用命名目标链接:放弃旧的${ASSIMP_LIBRARIES}、${OMPL_LIBRARIES}变量,改用OMPL和Assimp导出的命名目标ompl::ompl、assimp::assimp,避免变量冲突问题。
  3. 调整查找顺序:先查找OMPL让其处理自身依赖,再查找Assimp的CONFIG版本,确保获取系统中正确的Assimp库信息。

备选方案(兼容旧版CMake写法)

如果必须使用变量方式,可显式指定Assimp的查找模式:

cmake_minimum_required(VERSION 3.10)
project(Project_Name)

find_package(ompl REQUIRED)
# 使用NO_MODULE模式查找Assimp,避免OMPL的CONFIG设置干扰
find_package(assimp REQUIRED NO_MODULE)

include_directories(
    ${OMPL_INCLUDE_DIRS}
    ${ASSIMP_INCLUDE_DIR}
)

add_executable(AssimpTest testArea/AssimpTest.cpp)

target_link_libraries(AssimpTest
    ${OMPL_LIBRARIES}
    ${ASSIMP_LIBRARIES}
)

额外代码逻辑修正

你的测试代码中存在逻辑错误:判断模型加载失败的条件写反了,正确写法应为:

if (nullptr == scene)
{
    std::cout << "ERROR: model could not be loaded.";
    return 1;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 06:05:36