th-x86_64: strange runtime linker failure

Jakub Bogusz qboosh at pld-linux.org
Tue Nov 10 18:45:10 CET 2020


I'm trying to debug libgda5 build failure:

| + javac getsp.java
| javac: error while loading shared libraries: libjli.so: cannot open shared object file: No such file or directory
| error: Bad exit status from /tmp/B.4ZeOy1/BUILD/tmp/rpm-tmp.33887 (%build)

/usr/bin/javac is a symlink to /usr/lib64/jvm/icedtea8-3.17.0/bin/javac and ldd shows:

|         linux-vdso.so.1 (0x00007fff6bad1000)
|         libjli.so => /usr/lib64/jvm/icedtea8-3.17.0/bin/../lib/amd64/jli/libjli.so (0x00007f5c2ce8f000)
|         libc.so.6 => /lib64/libc.so.6 (0x00007f5c2cc5b000)
|         libz.so.1 => /lib64/libz.so.1 (0x00007f5c2cc41000)
|         libdl.so.2 => /lib64/libdl.so.2 (0x00007f5c2cc3b000)
|         libpthread.so.0 => /lib64/libpthread.so.0 (0x00007f5c2cc1a000)
|         /lib64/ld-linux-x86-64.so.2 (0x00007f5c2cea7000)

libjli.so is found by $ORIGIN/../lib/amd64/jli RPATH.

But:

| $ /usr/lib64/jvm/icedtea8-3.17.0/bin/javac -help
| /usr/lib64/jvm/icedtea8-3.17.0/bin/javac: error while loading shared libraries: libjli.so: cannot open shared object file: No such file or directory

`strace -f /usr/lib64/jvm/icedtea8-3.17.0/bin/javac -help` shows something strange:

| # src  : https://buildlogs.pld-linux.org/pld/th/x86_64/FAIL/command,bd4d8466-aafa-4f38-ab38-45d3dd906832.bz2
| # date   : 2020/11/10 18:21:26
| execve("/usr/lib64/jvm/icedtea8-3.17.0/bin/javac", ["/usr/lib64/jvm/icedtea8-3.17.0/b"..., "-help"], 0x7ffd2c6b3340 /* 33 vars */) = 0
          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
| brk(NULL)                               = 0x56350d9df000
| arch_prctl(0x3001 /* ARCH_??? */, 0x7fff5b7713e0) = -1 EINVAL (Invalid argument)
| readlink("/proc/self/exe", "/usr/bin/rsync", 4096) = 14
                             ^^^^^^^^^^^^^^^^ ???
| mmap(NULL, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f6f30ec0000
| access("/etc/ld.so.preload", R_OK)      = -1 ENOENT (No such file or directory)
| openat(AT_FDCWD, "/usr/bin/../lib/amd64/jli/tls/x86_64/x86_64/libjli.so", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
                    ^^^^^^^^
| stat("/usr/bin/../lib/amd64/jli/tls/x86_64/x86_64", 0x7fff5b770580) = -1 ENOENT (No such file or directory)
        ^^^^^^^^

execve shows proper path, but why readlink("/proc/self/exe") returns
"/usr/bin/rsync" and $ORIGIN is resolved as /usr/bin instead of
/usr/lib64/jvm/icedtea8-3.17.0/bin ???


-- 
Jakub Bogusz    http://qboosh.pl/


More information about the pld-devel-en mailing list