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

如何在flatpak-builder环境中安装Eigen等header-only库

问题原因

你的配置没生效有两个核心错误:

  • install -d参数的作用是创建空目录,根本不会执行文件/文件夹复制操作,运行完只会得到两个空文件夹,自然不会有头文件被安装
  • Flatpak构建沙箱有严格的路径规则:所有模块的安装内容必须放到/app前缀下,直接写/include属于沙箱系统路径,要么无写入权限,要么内容不会被纳入打包范围,也不会被后续CMake构建流程的默认搜索路径识别。

另外你判断错了一点:Eigen虽然是纯头文件库,但它原生提供了完整的CMake构建配置,完全没必要用simple构建系统手动拷文件,直接用你熟悉的cmake-ninja是最稳妥的方案,还能自动导出CMake依赖配置,后续应用代码里直接find_package(Eigen3 REQUIRED)就能识别,不用手动加头文件路径。

正确配置方案

推荐方案:用cmake-ninja构建(零额外适配)

直接把你写的eigen模块改成如下配置即可,所有安装逻辑Eigen的CMake脚本会自动处理,还会自动关掉不需要的文档、测试编译步骤,节省构建时间:

{
    "name": "eigen",
    "buildsystem": "cmake-ninja",
    "config-opts": [
        "-DCMAKE_BUILD_TYPE=Release",
        "-DEIGEN_BUILD_DOC=OFF",
        "-DEIGEN_BUILD_TESTS=OFF",
        "-DBUILD_TESTING=OFF"
    ],
    "sources": [
        {
            "type": "archive",
            "url": "https://gitlab.com/libeigen/eigen/-/archive/3.3.9/eigen-3.3.9.zip",
            "sha512": "3b06da583037649ad42190bd018ddf40b85179ad0877ebd7c1ca7b8498a1453eed25919de27d3bb737754086e1513408e7de4a2110d51912f2e5503e1ab7d838"
        }
    ]
}

备选方案:坚持用simple构建系统手动安装

如果你一定要用simple构建系统,需要先修正两个细节:

  • 源码压缩包解压后会生成eigen-3.3.9的根目录,头文件存放在这个子目录下,要么在模块里加"subdir": "eigen-3.3.9"指定工作目录,要么命令里写全路径
  • 目标路径必须是/app/include,复制目录要用递归复制参数,不能用install -d

对应配置如下:

{
    "name": "eigen",
    "buildsystem": "simple",
    "build-commands": [
        "install -d /app/include",
        "cp -r eigen-3.3.9/Eigen /app/include/",
        "cp -r eigen-3.3.9/unsupported /app/include/"
    ] ,
    "sources": [
        {
            "type": "archive",
            "url": "https://gitlab.com/libeigen/eigen/-/archive/3.3.9/eigen-3.3.9.zip",
            "sha512": "3b06da583037649ad42190bd018ddf40b85179ad0877ebd7c1ca7b8498a1453eed25919de27d3bb737754086e1513408e7de4a2110d51912f2e5503e1ab7d838"
        }
    ]
}
其他疑问说明
  • Flatpak构建阶段是完全隔离的沙箱环境,没有apt、dnf这类系统包管理器可用,所有依赖都必须以模块形式写入manifest,从源码构建或者直接拷贝文件,不允许从软件源拉取包安装。不同版本的Freedesktop SDK、GNOME SDK、KDE SDK会自带一批常用基础库,除此之外的依赖都需要自行添加模块构建。
  • 之前的命令没有报错,是因为install -d Eigen /include/Eigen的实际执行逻辑是创建两个空目录:一个是当前工作目录下的Eigen空文件夹,另一个是尝试在根目录/include下创建Eigen空文件夹,既没有复制任何头文件,路径也不在CMake默认搜索范围内,自然后续构建找不到依赖。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 18:31:04