如何在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
相关产品推荐
相关产品推荐

