openjdk编译必须用--with-output-dir指定绝对路径输出目录,该目录父级需存在且无空格/中文;最终jdk位于/images/jdk,images/jdk/bin/java -version可验证成功。

configure 时用 --with-output-dir 指定输出目录
OpenJDK 编译不走传统的 make install 流程,而是把所有中间文件、最终镜像都放在一个统一的构建输出目录里。这个目录必须在运行 bash configure 时就明确指定,后续无法通过环境变量或 make 参数覆盖。
-
--with-output-dir必须是绝对路径,不能是相对路径(比如./build或build/linux-x86_64-server-release都会失败) - 路径中不能含空格或中文,否则 configure 会静默失败或后续编译报错(尤其在 Windows + Cygwin/WSL 场景下高频触发)
- 该路径会被
configure自动创建,但父目录必须已存在且当前用户有读写权限 - 如果重复运行
configure到同一输出目录,它会复用已有配置缓存;想彻底重来,直接删掉整个输出目录即可
不设 --with-output-dir 的默认行为很危险
如果不显式指定,configure 会在源码根目录下自动生成类似 build/<os>-<arch>-<variant>-<debug-level></debug-level></variant></arch></os> 的子目录(如 build/linux-x86_64-server-release)。问题在于:
- 路径名由系统自动推导,不同机器、不同 shell 环境下可能生成不一致的目录名,导致构建产物位置不可控
- 源码目录被污染:build 目录和 src、test 等平级,容易误删或 git 提交
- 多个构建配置(比如同时试
server和client变体)会挤在同一个父目录下,命名冲突风险高
make images 后的 JDK 实际位置在哪
即使指定了 --with-output-dir=/path/to/mybuild,最终可用的 JDK 并不在 /path/to/mybuild 根目录下,而是在:
/path/to/mybuild/images/jdk
-
images/jdk是标准输出结构,包含完整可运行的 JDK(bin/java、lib/、jre/ 等) -
images/jdk/bin/java -version是验证是否成功最直接的方式 -
images/test和images/docs是可选产物,需额外加--with-jtreg等参数才会生成 - 不要试图从
hotspot/outputdir或jdk/src下找 java 可执行文件——那些只是中间产物或源码
真正容易被忽略的是:输出目录一旦被 configure 写入,就绑定了该次构建的所有路径逻辑。哪怕只改了一个 --enable-debug 开关,也建议换新输出目录,否则缓存残留可能引发奇怪的链接错误或符号未定义问题。











