[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: Passing LD_RUN_PATH through to the linker
From: |
Kevin R. Bulgrien |
Subject: |
Re: Passing LD_RUN_PATH through to the linker |
Date: |
Thu, 15 Dec 2022 15:29:21 -0600 (CST) |
> On OpenServer, I usually just build with the SONAME being a full path name.
>
> I am attaching a patch to the libtool 2.4.6 generated during
> a libssh2-1.8.0 build.
>
> Once all testing is complete, I do
> ......
> rm src/libssh2.la
> SCOABSPATH=1 ; export SCOABSPATH
> gmake 2>&1 | tee x.log
> ......
> then package.
>
> Note: the last hunk is to address a regression introduced in 2.4.6
> with the freebsd reorg.
Thanks for the hint. For some reason I've not been able to build libtool 2.4.3
and above due to a situation I don't know how to resolve:
...
GEN libtoolize
GEN libltdl/libltdl/lt__argz.h
make all-recursive
make[1]: Entering directory `/csdi/src/sco507/gnu/libtool/libtool-2.4.6'
Making all in .
make[2]: Entering directory `/csdi/src/sco507/gnu/libtool/libtool-2.4.6'
CC libltdl/loaders/libltdl_libltdl_la-preopen.lo
libtool: Version mismatch error. This is libtool 2.4.6, revision 2.4.6,
libtool: but the definition of this LT_INIT comes from revision .
libtool: You should recreate aclocal.m4 with macros from revision 2.4.6
libtool: of libtool 2.4.6 and run autoconf again.
make[2]: *** [libltdl/loaders/libltdl_libltdl_la-preopen.lo] Error 63
make[2]: Leaving directory `/csdi/src/sco507/gnu/libtool/libtool-2.4.6'
make[1]: *** [all-recursive] Error 1
make[1]: Leaving directory `/csdi/src/sco507/gnu/libtool/libtool-2.4.6'
make: *** [all] Error 2
autoreconf, or at least the way I've done things, does not correct this issue.
Nevertheless, after applying your patch, it is possible to see that DT_SONAME
now has a full path:
$ readelf -d /usr/local/lib/libssh2.so.1 | grep SONAME
0x0000000e (SONAME) Library soname:
[/usr/local/lib/libssh2.so.1]
Unfortunately, this does not seem to cure loading of indirect dependencies as
far as I can see:
$ example/.libs/ssh2
Object: Search Path DT_RUNPATH
/usr/local/lib
Object: example/.libs/ssh2 Search Path LD_LIBRARY_PATH
Object: example/.libs/ssh2 Search Path DT_RPATH
Object: example/.libs/ssh2 Search Path DEFAULT
/usr/lib
_rt_so_find: trying: /usr/local/lib/libssh2.so.1
Object: /usr/local/lib/libssh2.so.1 Search Path DT_RUNPATH
/usr/local/lib
search_dir_list: trying: /usr/local/lib/libcrypto.so.3
_rt_so_find: trying: /usr/lib/libz.so.1
search_dir_list: trying: /usr/local/lib/libssl.so.3
_rt_so_find: trying: /usr/lib/libcrypt.so
search_dir_list: trying: /usr/local/lib/libcrypto.so.3
_rt_so_find: trying: /usr/lib/libz.so.1
search_dir_list: trying: /usr/local/lib/libssl.so.3
_rt_so_find: trying: /usr/lib/libsocket.so.2
search_dir_list: trying: /usr/lib/libnsl.so
search_dir_list: trying: /usr/lib/libcrypto.so.3
dynamic linker : example/.libs/ssh2 : could not open libcrypto.so.3
Killed
Curiously, the above shows "trying /usr/local/lib/libcrypto.so.3" so I'm not
sure what went wrong.
$ ls -l /usr/local/lib/libcrypto.so.3
lrwxrwxrwx 1 root sys 54 Dec 14 13:29
/usr/local/lib/libcrypto.so.3 ->
/opt/K/CSDI/openssl/3.0.3/usr/local/lib/libcrypto.so.3
$ ls -l /opt/K/CSDI/openssl/3.0.3/usr/local/lib/libcrypto.so.3
-rwxr-xr-x 1 root sys 3731468 Dec 14 13:29
/opt/K/CSDI/openssl/3.0.3/usr/local/lib/libcrypto.so.3
Perhaps a change to DT_NEEDED is also required so the indirect dependencies also
have paths:
$ readelf -d /usr/local/lib/libssh2.so.1
Dynamic segment at offset 0xfb40 contains 21 entries:
Tag Type Name/Value
0x00000001 (NEEDED) Shared library: [libcrypto.so.3]
0x00000001 (NEEDED) Shared library: [/usr/lib/libz.so.1]
0x00000001 (NEEDED) Shared library: [libssl.so.3]
0x0000000c (INIT) 0x4dae0
0x0000000d (FINI) 0x4daf0
0x0000000e (SONAME) Library soname:
[/usr/local/lib/libssh2.so.1]
0x0000001d (RUNPATH) Library runpath: [/usr/local/lib]
0x00000004 (HASH) 0xc0
0x00000005 (STRTAB) 0x5498
0x00000006 (SYMTAB) 0x1408
0x0000000a (STRSZ) 18886 (bytes)
0x0000000b (SYMENT) 16 (bytes)
0x00000016 (TEXTREL) 0x0
0x00000003 (PLTGOT) 0x4ec2c
0x00000002 (PLTRELSZ) 40 (bytes)
0x00000014 (PLTREL) REL
0x00000017 (JMPREL) 0xfb18
0x00000011 (REL) 0x9e60
0x00000012 (RELSZ) 23736 (bytes)
0x00000013 (RELENT) 8 (bytes)
0x00000000 (NULL) 0x0
I'm assuming there must be something else different in the way we build.
Regards,
Kevin R. Bulgrien