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

Ubuntu20.04下CMake构建dpgo时SuiteSparse库链接错误求助

解决DPGO项目CMake优先链接Covins依赖中SuiteSparse的问题

核心问题分析

Covins工作空间的devel目录被加入到CMake默认搜索路径,导致find_package优先识别该路径下的SuiteSparse静态库;而系统安装的libsuitesparse-dev包内的静态库未编译-fPIC参数,无法链接到DPGO的共享库中,因此必须强制CMake使用系统提供的SuiteSparse共享库。

解决方案步骤

1. 彻底排除Covins工作空间的干扰

在DPGO的CMakeLists.txt最开头添加代码,直接过滤掉Covins的路径,避免CMake搜索该目录下的依赖:

# 过滤covins_ws的devel路径,防止干扰依赖搜索
list(FILTER CMAKE_PREFIX_PATH EXCLUDE REGEX "/home/glenn/ws/covins_ws/devel")

2. 强制CMake优先搜索共享库

在查找SuiteSparse组件前,设置CMake优先查找.so共享库(避免误选未适配的静态库):

# 优先查找共享库,规避未编译-fPIC的静态库链接问题
set(CMAKE_FIND_LIBRARY_SUFFIXES .so .a)

3. 指定SuiteSparse系统路径并查找组件

替换原有的SuiteSparse查找逻辑,明确指定系统安装路径:

# 指定SuiteSparse根目录为系统默认路径
set(SuiteSparse_ROOT "/usr")

# 查找所需的SuiteSparse组件
find_package(CHOLMOD REQUIRED)
find_package(SPQR REQUIRED)

4. 清理缓存并重新构建

删除DPGO的build目录,清空旧缓存后重新执行构建:

rm -rf build && mkdir build && cd build
cmake ..
make -j$(nproc)

备选方案:手动指定库和头文件

如果上述方法仍不生效,可跳过find_package流程,直接手动指定系统的SuiteSparse资源:

# 添加系统SuiteSparse头文件路径
include_directories("/usr/include/suitesparse")

# 链接DPGO目标时,手动添加系统共享库
target_link_libraries(DPGO
  PRIVATE
    /usr/lib/x86_64-linux-gnu/libcholmod.so
    /usr/lib/x86_64-linux-gnu/libspqr.so
    /usr/lib/x86_64-linux-gnu/libsuitesparseconfig.so
    /usr/lib/x86_64-linux-gnu/libamd.so
    /usr/lib/x86_64-linux-gnu/libcolamd.so
    /usr/lib/x86_64-linux-gnu/libcamd.so
    /usr/lib/x86_64-linux-gnu/libccolamd.so
    /usr/lib/x86_64-linux-gnu/libmetis.so
)

通过以上配置,可确保DPGO完全使用系统安装的SuiteSparse依赖,同时保留Covins工作空间不受影响。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 22:05:32