树莓派Debian 12环境安装eProsima FastDDS 3.2.0时,出现‘openjdk-11-jdk-headless无安装候选’错误求助
树莓派Debian 12环境安装eProsima FastDDS 3.2.0时,出现‘openjdk-11-jdk-headless无安装候选’错误求助
老哥,我之前在Debian 12 Bookworm上折腾FastDDS的时候也踩过一模一样的Java依赖坑,给你几个亲测有效的解决思路:
优先试试从backports源安装Java 11
Debian 12默认软件源里已经把OpenJDK 11标成旧版本了,默认推的是OpenJDK 17,所以直接搜11的包自然找不到候选。你可以指定从bookworm-backports源来装,命令如下:sudo apt update && sudo apt install -t bookworm-backports openjdk-11-jdk-headless装完之后再重新跑FastDDS的安装脚本,应该就能正常通过依赖检查了。
让安装脚本识别你已有的SDKMAN版Java 11
既然你已经用SDKMAN装好了Java 11,先确认它是不是当前环境的默认Java:java -version要是输出是11.x.x的版本,就手动设置JAVA_HOME环境变量指向SDKMAN的安装路径(路径得根据你实际装的版本调整):
export JAVA_HOME=$HOME/.sdkman/candidates/java/11.0.20-tem设置好之后再运行
./install.sh eprosima fastdds 3.2.0 Linux,脚本会优先用你本地已经装好的Java环境,不会再跑去apt拉包了。绕开安装脚本,直接源码编译FastDDS
其实FastDDS的核心是C++写的,Java依赖只是给部分辅助工具用的。如果不需要Java相关的组件,你可以直接源码编译安装,完全避开这个依赖问题:- 先装核心的编译依赖:
sudo apt install cmake g++ libasio-dev libtinyxml2-dev - 克隆FastDDS 3.2.0版本的源码(指定v3.2.0分支):
git clone --branch v3.2.0 https://github.com/eProsima/Fast-DDS.git - 进入源码目录开始编译安装:
cd Fast-DDS mkdir build && cd build cmake .. -DCOMPILE_JAVA=OFF make -j$(nproc) sudo make install
加
-DCOMPILE_JAVA=OFF是明确告诉编译系统不要构建Java相关的部分,这样连Java环境都不需要准备了。- 先装核心的编译依赖:
我当时是用第一个方法搞定的,你可以先试试这个,最省心。
内容来源于stack exchange




