Re: building openjdk-7 on kfreebsd-amd64
On 20/03/12 12:43, Georgi Naplatanov wrote:
> ... last week something happened to
> kfreebsd-amd64 (unstable) and the build process of openjdk-7 gave
> another error even with dpkg-buildpackage which worked before. The log
> file is here -
> http://os.oles.biz/openjdk/openjdk-7_7~u3-2.1-3_kfreebsd-amd64.build.gz
Hi,
I wonder if this could be to do with the library rpath for
j2sdk-image/jre/bin/java; it is set to be able to find libjli only.
Full explanation:
/«PKGBUILDDIR»/build/bootstrap/jdk1.6.0/bin/java -version
Error: could not find libjava.so
Where /«PKGBUILDDIR»/build/bootstrap/jdk1.6.0 is symlink to
/«PKGBUILDDIR»/build/bootstrap/icedtea
Then /«PKGBUILDDIR»/build/bootstrap/icedtea is a symlink to
/«PKGBUILDDIR»/build/openjdk.build-boot/j2sdk-image/
And the binary is where it should be, at
/«PKGBUILDDIR»/build/openjdk.build-boot/j2sdk-image/bin/java
> RUNPATH for: /«PKGBUILDDIR»/build/openjdk.build-boot/j2sdk-image/jre/bin/java
> 0x0000000000000001 (NEEDED) Shared library: [libpthread.so.0]
> 0x0000000000000001 (NEEDED) Shared library: [libjli.so]
> 0x0000000000000001 (NEEDED) Shared library: [libz.so.1]
> 0x0000000000000001 (NEEDED) Shared library: [libdl.so.2]
> 0x0000000000000001 (NEEDED) Shared library: [libc.so.0.1]
> 0x000000000000000f (RPATH) Library rpath: [$ORIGIN/../lib/amd64/jli:$ORIGIN/../jre/lib/amd64/jli]
So the rpath first expands to
/«PKGBUILDDIR»/build/openjdk.build-boot/j2sdk-image/jre/lib/amd64/jli
And libjli is indeed at
/«PKGBUILDDIR»/build/openjdk.build-boot/j2sdk-image/jre/lib/amd64/jli/libjli.so
> RUNPATH for: /«PKGBUILDDIR»/build/openjdk.build-boot/j2sdk-image/jre/lib/amd64/jli/libjli.so
> 0x0000000000000001 (NEEDED) Shared library: [libdl.so.2]
> 0x0000000000000001 (NEEDED) Shared library: [libc.so.0.1]
> 0x0000000000000001 (NEEDED) Shared library: [libz.so.1]
> 0x0000000000000001 (NEEDED) Shared library: [libpthread.so.0]
> 0x000000000000000f (RPATH) Library rpath: [$ORIGIN:$ORIGIN/..]
If libjli.so now tried to load libjava.so, it would be looking in the
right place now (/jli/../)
But if the main executable tried to load libjava.so, its rpath is set
only to the /jli subdir where it is not found.
The executable was linked with:
> gcc-4.6 -o /«PKGBUILDDIR»/build/openjdk.build-boot/bin/java -Xlinker -O1 -Xlinker -version-script=../../../java/main/java/mapfile-amd64 -Xlinker -z -Xlinker defs -Wl,-Bsymboli
> c-functions -L/«PKGBUILDDIR»/build/openjdk.build-boot/lib/amd64 -Wl,-soname=lib.so -Wl,-z,relro -L /«PKGBUILDDIR»/build/openjdk.build-boot/lib/amd64/jli -Wl,--allow-shlib-unde
> fined -Wl,-rpath -Wl,\$ORIGIN/../lib/amd64/jli -Wl,-rpath -Wl,\$ORIGIN/../jre/lib/amd64/jli \
> /«PKGBUILDDIR»/build/openjdk.build-boot/tmp/java/java/obj64/main.o -lpthread -ljli -lz -ldl -lc
And I think something like this is missing from there for it to work:
> -Wl,-rpath -Wl,\$ORIGIN/../lib/amd64
But I don't have a build environment to try this on right now. And
wouldn't know where/how to make this change either...
Regards,
--
Steven Chamberlain
steven@pyro.eu.org
Reply to: