Hi Kevin,
On 12/15/22 1:29 PM, Kevin R. Bulgrien wrote: >> 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. No idea about this. I have not tried to build latest libtool on OpenServer 5 I usually patch libtool post configure on each package as needed to get full path SONAME > > 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 With my patch, I would have expected DT_RINPATH to be empty. But then, all my libs installed outside of /usr/lib have full path SONAME > 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 > That is unexpected. Are you on old 5.0.7 or the current Definitive 2018? Does the system have all the patches? (run patchck) > 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. Which development system are you using? OpenServer 5.0..7 had 3 different ones available. OpenServer 5 Definitive 2018 has 4. The latest being a GCC 4.2.4 and friends. > > Regards, > Kevin R. Bulgrien > -- Tim Rice Multitalents t...@multitalents.net