[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

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: