我正在尝试为工作构建旧版本的 JDK,并且在运行make dev-sanity
. 好吧,有几个障碍,但我已经设法绕过所有障碍,除了这个。具体来说,我正在尝试从此处的源 JAR 构建 JDK 1.6u17 的 64 位版本:
TL;DR:我正在从源代码构建 JDK6u17,但
dev-sanity
在make
. 我在构建自述文件中列出了所有软件及其版本,所以我认为这是一个环境变量问题。
软件版本信息
- Windows 7,amd64 处理器
cl.exe
版本是14.00.50727.762
link.exe
版本是8.00.50727.762
- Java 引导程序是 JDK 1.7u15
msvcrt.dll
版本是7.0.7601.17744
- Cygwin 是当前版本
make
是 GNU make, version 的 Cygwin 版本3.80-1
,它支持 DOS 路径。我还尝试了官方存储库中的 3.81 和 3.82 版本,因为它们没有 DOS 路径支持,所以它们不起作用,以及带有 DOS 路径支持的修补 3.81 和 3.82 版本,它们都给了我相同的错误输出为 3.80。
环境变量
PATH
- 包括编译器工具、引导程序 JDK、来自 Cygwin 的 UNIX 工具,然后是我路径上的所有其他东西,按此顺序。LIB
SetEnv.cmd /X64
-在 Microsoft SDK 的文件夹中设置为用户环境变量Bin
以获取值INCLUDE
SetEnv.cmd /X64
-在 Microsoft SDK 的文件夹中设置为用户环境变量Bin
以获取值ALT_COMPILER_PATH
- 设置为C:\PROGRA~1\MICROS~2\Windows\v6.0\VC\Bin\x64\
(使用短路径来避免空格问题)ALT_BOOTDIR
-C:\PROGRA~1\Java\JDK17~1.0_1\
(JDK 7 路径)ALT_MSVCRT_DLL_PATH
-C:\Windows\System32\
(msvcrt.dll 文件在我的 System32 文件夹中)ALT_DXSDK_PATH
- 只是设置为短路径DXSDK_DIR
我可以打开 Cygwin 并使用以下命令开始制作过程:
make dev-sanity ARCH_DATA_MODEL=64 ARCH=amd64
但随后它会出现以下输出错误:
$ cd [jdk-src-root]/control/make
$ make dev-sanity ARCH_DATA_MODEL=64 ARCH=amd64
cd ../../control/make
make sanity DEV_ONLY=true
make[1]: Entering directory `/cygdrive/c/Users/bsaltz/jdk6u17src/control/make'
make[2]: Entering directory `/cygdrive/c/Users/bsaltz/jdk6u17src/deploy/make'
../make/common/Defs.gmk:52: /make/common/Defs.gmk: No such file or directory
make[2]: -p: Command not found
make[2]: -p: Command not found
../make/common/Defs-windows.gmk:9: /make/common/Defs-windows.gmk: No such file or directory
../../j2se/make/common/Defs-windows.gmk:16: /Defs.gmk: No such file or directory
/bin/sh: - : invalid option
Usage: /bin/sh [GNU long option] [option] ...
/bin/sh [GNU long option] [option] script-file ...
[ ... More /bin/sh usage output ]
/bin/sh: - : invalid option
Usage: /bin/sh [GNU long option] [option] ...
/bin/sh [GNU long option] [option] script-file ...
[ ... More /bin/sh usage output ]
/bin/sh: #define: command not found
/bin/sh: {print $3}: command not found
/bin/sh: -n: command not found
/bin/sh: - : invalid option
/bin/sh: - : invalid option
/bin/sh: -n: command not found
../../j2se/make/common/shared/Sanity.gmk:97: /Sanity-Settings.gmk: No such file or directory
make[2]: -p: Command not found
make[2]: *** No rule to make target `/Sanity-Settings.gmk'. Stop.
make[2]: Leaving directory `/cygdrive/c/Users/bsaltz/jdk6u17src/deploy/make'
make[1]: *** [deploy-sanity] Error 2
make[1]: Leaving directory `/cygdrive/c/Users/bsaltz/jdk6u17src/control/make'
make: *** [dev-sanity] Error 2
据我所知,我可能在某处有一个坏的或缺少的环境变量,因为它看起来命令没有正确执行,也许有些变量没有得到解决。
请注意,我们这样做是为了获取带有局部变量的调试 jar,而且似乎 fastdebug jar 不再适用于 6u17。如果有人有 6u17 fastdebug 链接,如果这意味着我不需要编译任何东西,我也会接受。
如果有人想要-d
输出,请告诉我,我会把它贴在 pastebin 或其他东西上。