如何构建OpenJDK 8 src.zip / launcher /的C代码

时间:2014-04-30 15:50:30

标签: java openjdk

我已经下载了JDK 8.20:https://jdk8.java.net/download.html

有一个src.zip,它看起来像嵌入的一个例子,但是没有makefile或其他构建脚本。

目录/启动器/包含文件:

defines.h
emessages.h
java.c
java.h
java_md.h
java_md_common.c
java_md_solinux.c
java_md_solinux.h
jli_util.c
jli_util.h
main.c
manifest_info.h
parse_manifest.c
splashscreen.h
splashscreen_stubs.c
version_comp.c
version_comp.h
wildcard.c
wildcard.h

我制作了这个小build.sh-script:

# -m32 = 32bit for embedding
# -I. for fake jvm.h, because it does not exist and fails on including it otherwise
options="-m32 -I/root/openjdk8/jdk1.8.0_20/include/ -I/root/openjdk8/jdk1.8.0_20/include/linux/ -I."

echo "COMPILE java.c"
gcc -c java.c -o java.o $options

echo "COMPILE java_md_common.c"
gcc -c java_md_common.c -o java_md_common.o $options

echo "COMPILE java_md_solinux.c"
gcc -c java_md_solinux.c -o java_md_solinux.o $options

echo "COMPILE jli_util.c"
gcc -c jli_util.c -o jli_util.o $options

echo "COMPILE main.c"
gcc -c main.c -o main.o $options

echo "COMPILE parse_manifest.c"
gcc -c parse_manifest.c -o parse_manifest.o $options

echo "COMPILE splashscreen_stubs.c"
gcc -c splashscreen_stubs.c -o splashscreen_stubs.o $options

echo "COMPILE version_comp.c"
gcc -c version_comp.c -o version_comp.o $options

echo "COMPILE wildcard.c"
gcc -c wildcard.c -o wildcard.o $options

发生以下错误:

./build.sh
COMPILE java.c
java.c: In function âContinueInNewThreadâ:
java.c:1885:29: error: storage size of âargs1_1â isnât known
COMPILE java_md_common.c
java_md_common.c: In function âProgramExistsâ:
java_md_common.c:67:17: error: storage size of âsbâ isnât known
java_md_common.c:70:26: error: âS_IEXECâ undeclared (first use in this function)
java_md_common.c:70:26: note: each undeclared identifier is reported only once for each function it appears in
java_md_common.c: In function âJLI_ReportErrorMessageSysâ:
java_md_common.c:155:21: error: âerrnoâ undeclared (first use in this function)
java_md_common.c: In function âProcessDirâ:
java_md_common.c:214:5: error: unknown type name âDIRâ
java_md_common.c:222:15: warning: assignment makes pointer from integer without a cast [enabled by default]
java_md_common.c:226:17: warning: assignment makes pointer from integer without a cast [enabled by default]
java_md_common.c:228:18: error: dereferencing pointer to incomplete type
java_md_common.c:229:18: error: dereferencing pointer to incomplete type
java_md_common.c:231:22: error: dereferencing pointer to incomplete type
java_md_common.c:233:22: error: dereferencing pointer to incomplete type
java_md_common.c:236:46: error: dereferencing pointer to incomplete type
java_md_common.c:237:67: error: dereferencing pointer to incomplete type
java_md_common.c:239:25: error: dereferencing pointer to incomplete type
java_md_common.c:242:48: error: dereferencing pointer to incomplete type
java_md_common.c: In function âFindBootStrapClassâ:
java_md_common.c:494:59: error: âRTLD_DEFAULTâ undeclared (first use in this function)
COMPILE java_md_solinux.c
java_md_solinux.c:27:20: fatal error: jvm_md.h: No such file or directory
compilation terminated.
COMPILE jli_util.c
COMPILE main.c
In file included from main.c:33:0:
defines.h:37:2: error: #error "FULL_VERSION must be defined"
defines.h:44:2: error: #error "JDK_MAJOR_VERSION and JDK_MINOR_VERSION must be defined"
main.c: In function âmainâ:
main.c:128:20: error: âFULL_VERSIONâ undeclared (first use in this function)
main.c:128:20: note: each undeclared identifier is reported only once for each function it appears in
main.c:129:20: error: âDOT_VERSIONâ undeclared (first use in this function)
COMPILE parse_manifest.c
COMPILE splashscreen_stubs.c
COMPILE version_comp.c
COMPILE wildcard.c

有人知道如何编译吗?

1 个答案:

答案 0 :(得分:2)

我目前面临同样的问题。也许它可以通过为您的设置提供jvm.h和jvm_md.h来解决。 两者都包含-jvm特定的符号,而jvm_md.h包含另外的与平台相关的符号。因此,您需要为目标平台选择jvm.h作为目标jvm和jvm_md.h。要获取Oracle的OpenJDK8的这些标头,请转到http://download.java.net/openjdk/jdk8/并下载源代码。 (对于Java 7,它是http://download.java.net/openjdk/jdk7/等)

在此文件中,您将在文件夹中找到jvm.h /的openjdk / JDK / SRC /共享/ JavaVM的/导出/

jvm_md.h在文件夹中: / openjdk / jdk / src / [目标平台] / javavm / export /

请注意,此路径不适用于Linux和Bsd(/ openjdk / jdk / src / [目标平台]仅包含这些情况下的文档)。我相信 - 但是 - Solaris版本也打算为这些系统提供服务。

希望这会有所帮助......