Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Load system libraries in case of custom library location #135

Closed
GaneshKandu opened this issue Feb 19, 2023 · 10 comments
Closed

Load system libraries in case of custom library location #135

GaneshKandu opened this issue Feb 19, 2023 · 10 comments

Comments

@GaneshKandu
Copy link

Hi,

My PHP is build with custom OpenSSL and -rpath, when unixODBC trying to load libmsodbcsql its using php's -rpath that causing error.

Uncaught PDOException: SQLSTATE[01000]: [unixODBC][Driver Manager]Can't open lib '/opt/microsoft/msodbcsql18/lib64/libmsodbcsql-18.1.so.2.1

LD_DEBUG=all php -r '$con=new PDO("sqlsrv:Server=domain.com,1433;Database=db", "user", "password");'

   1770602:	symbol=EVP_KDF_ctrl;  lookup in file=/usr/local/apps/php72/bin/php [0]
   1770602:	symbol=EVP_KDF_ctrl;  lookup in file=/lib64/libcrypt.so.1 [0]
   1770602:	symbol=EVP_KDF_ctrl;  lookup in file=/lib64/libresolv.so.2 [0]
   1770602:	symbol=EVP_KDF_ctrl;  lookup in file=/lib64/libstdc++.so.6 [0]
   1770602:	symbol=EVP_KDF_ctrl;  lookup in file=/lib64/librt.so.1 [0]
   1770602:	symbol=EVP_KDF_ctrl;  lookup in file=/lib64/libm.so.6 [0]
   1770602:	symbol=EVP_KDF_ctrl;  lookup in file=/lib64/libdl.so.2 [0]
   1770602:	symbol=EVP_KDF_ctrl;  lookup in file=/lib64/libnsl.so.1 [0]
   1770602:	symbol=EVP_KDF_ctrl;  lookup in file=/usr/local/apps/lib/libz.so.1 [0]
   1770602:	symbol=EVP_KDF_ctrl;  lookup in file=/usr/local/apps/lib/libxml2.so.2 [0]
   1770602:	symbol=EVP_KDF_ctrl;  lookup in file=/usr/local/apps/liblzma/lib/liblzma.so.5 [0]
   1770602:	symbol=EVP_KDF_ctrl;  lookup in file=/usr/local/apps/lib/libiconv.so.2 [0]
   1770602:	symbol=EVP_KDF_ctrl;  lookup in file=/lib64/libc.so.6 [0]
   1770602:	symbol=EVP_KDF_ctrl;  lookup in file=/lib64/ld-linux-x86-64.so.2 [0]
   1770602:	symbol=EVP_KDF_ctrl;  lookup in file=/lib64/libgcc_s.so.1 [0]
   1770602:	symbol=EVP_KDF_ctrl;  lookup in file=/lib64/libpthread.so.0 [0]
   1770602:	symbol=EVP_KDF_ctrl;  lookup in file=/usr/local/apps/php72/ext/ioncube_loader_lin_7.2.so [0]
   1770602:	symbol=EVP_KDF_ctrl;  lookup in file=/usr/local/apps/php72/ext/opcache.so [0]
   1770602:	symbol=EVP_KDF_ctrl;  lookup in file=/usr/local/apps/php72/ext/bcmath.so [0]
   1770602:	symbol=EVP_KDF_ctrl;  lookup in file=/usr/local/apps/php72/ext/bz2.so [0]
   1770602:	symbol=EVP_KDF_ctrl;  lookup in file=/usr/local/apps/php72/ext/calendar.so [0]
   1770602:	symbol=EVP_KDF_ctrl;  lookup in file=/usr/local/apps/php72/ext/ctype.so [0]
   1770602:	symbol=EVP_KDF_ctrl;  lookup in file=/usr/local/apps/php72/ext/curl.so [0]
   1770602:	symbol=EVP_KDF_ctrl;  lookup in file=/usr/local/apps/curl-7/lib/libcurl.so.4 [0]
   1770602:	symbol=EVP_KDF_ctrl;  lookup in file=/usr/local/apps/openssl-30/lib/libssl.so.3 [0]
   1770602:	symbol=EVP_KDF_ctrl;  lookup in file=/usr/local/apps/openssl-30/lib/libcrypto.so.3 [0]
   1770602:	symbol=EVP_KDF_ctrl;  lookup in file=/usr/local/apps/lib/libldap-2.4.so.2 [0]
   1770602:	symbol=EVP_KDF_ctrl;  lookup in file=/usr/local/apps/lib/liblber-2.4.so.2 [0]
   1770602:	symbol=EVP_KDF_ctrl;  lookup in file=/usr/local/apps/lib/libssl.so.1.0.0 [0]
   1770602:	symbol=EVP_KDF_ctrl;  lookup in file=/usr/local/apps/lib/libcrypto.so.1.0.0 [0]
   1770602:	symbol=EVP_KDF_ctrl;  lookup in file=/usr/local/apps/php72/ext/dba.so [0]
   1770602:	symbol=EVP_KDF_ctrl;  lookup in file=/usr/local/apps/php72/ext/exif.so [0]
   1770602:	symbol=EVP_KDF_ctrl;  lookup in file=/usr/local/apps/php72/ext/ftp.so [0]
   1770602:	symbol=EVP_KDF_ctrl;  lookup in file=/usr/local/apps/openssl-11/lib/libcrypto.so.1.1 [0]
   1770602:	symbol=EVP_KDF_ctrl;  lookup in file=/usr/local/apps/openssl-11/lib/libssl.so.1.1 [0]
   1770602:	symbol=EVP_KDF_ctrl;  lookup in file=/usr/local/apps/php72/ext/gd.so [0]
   1770602:	symbol=EVP_KDF_ctrl;  lookup in file=/usr/local/apps/lib/libjpeg.so.9 [0]
   1770602:	symbol=EVP_KDF_ctrl;  lookup in file=/usr/local/apps/lib/libpng16.so.16 [0]
   1770602:	symbol=EVP_KDF_ctrl;  lookup in file=/usr/local/apps/lib/libwebp.so.7 [0]
   1770602:	symbol=EVP_KDF_ctrl;  lookup in file=/usr/local/apps/lib/libfreetype.so.6 [0]
   1770602:	symbol=EVP_KDF_ctrl;  lookup in file=/usr/local/apps/php72/ext/gettext.so [0]
   1770602:	symbol=EVP_KDF_ctrl;  lookup in file=/usr/local/apps/lib/libintl.so.8 [0]
   1770602:	symbol=EVP_KDF_ctrl;  lookup in file=/usr/local/apps/php72/ext/gmp.so [0]
   1770602:	symbol=EVP_KDF_ctrl;  lookup in file=/usr/local/apps/lib/libgmp.so.10 [0]
   1770602:	symbol=EVP_KDF_ctrl;  lookup in file=/usr/local/apps/php72/ext/iconv.so [0]
   1770602:	symbol=EVP_KDF_ctrl;  lookup in file=/usr/local/apps/php72/ext/imap.so [0]
   1770602:	symbol=EVP_KDF_ctrl;  lookup in file=/usr/local/apps/php72/ext/intl.so [0]
   1770602:	symbol=EVP_KDF_ctrl;  lookup in file=/usr/local/apps/lib/libicui18n.so.58 [0]
   1770602:	symbol=EVP_KDF_ctrl;  lookup in file=/usr/local/apps/lib/libicuuc.so.58 [0]
   1770602:	symbol=EVP_KDF_ctrl;  lookup in file=/usr/local/apps/lib/libicudata.so.58 [0]
   1770602:	symbol=EVP_KDF_ctrl;  lookup in file=/usr/local/apps/lib/libicuio.so.58 [0]
   1770602:	symbol=EVP_KDF_ctrl;  lookup in file=/usr/local/apps/php72/ext/ldap.so [0]
   1770602:	symbol=EVP_KDF_ctrl;  lookup in file=/usr/local/apps/php72/ext/mailparse.so [0]
   1770602:	symbol=EVP_KDF_ctrl;  lookup in file=/usr/local/apps/php72/ext/mbstring.so [0]
   1770602:	symbol=EVP_KDF_ctrl;  lookup in file=/usr/local/apps/php72/ext/memcached.so [0]
   1770602:	symbol=EVP_KDF_ctrl;  lookup in file=/usr/local/apps/php72/lib/libmemcached.so.11 [0]
   1770602:	symbol=EVP_KDF_ctrl;  lookup in file=/usr/local/apps/php72/lib/libmemcachedutil.so.2 [0]
   1770602:	symbol=EVP_KDF_ctrl;  lookup in file=/usr/local/apps/php72/ext/mysqlnd.so [0]
   1770602:	symbol=EVP_KDF_ctrl;  lookup in file=/usr/local/apps/php72/ext/mysqli.so [0]
   1770602:	symbol=EVP_KDF_ctrl;  lookup in file=/usr/local/apps/php72/ext/openssl.so [0]
   1770602:	symbol=EVP_KDF_ctrl;  lookup in file=/usr/local/apps/php72/ext/pcntl.so [0]
   1770602:	symbol=EVP_KDF_ctrl;  lookup in file=/usr/local/apps/php72/ext/pdo.so [0]
   1770602:	symbol=EVP_KDF_ctrl;  lookup in file=/usr/local/apps/php72/ext/pdo_mysql.so [0]
   1770602:	symbol=EVP_KDF_ctrl;  lookup in file=/usr/local/apps/php72/ext/pdo_sqlite.so [0]
   1770602:	symbol=EVP_KDF_ctrl;  lookup in file=/usr/local/apps/lib/libsqlite3.so.0 [0]
   1770602:	symbol=EVP_KDF_ctrl;  lookup in file=/usr/local/apps/php72/ext/shmop.so [0]
   1770602:	symbol=EVP_KDF_ctrl;  lookup in file=/usr/local/apps/php72/ext/soap.so [0]
   1770602:	symbol=EVP_KDF_ctrl;  lookup in file=/usr/local/apps/php72/ext/sockets.so [0]
   1770602:	symbol=EVP_KDF_ctrl;  lookup in file=/usr/local/apps/php72/ext/sodium.so [0]
   1770602:	symbol=EVP_KDF_ctrl;  lookup in file=/usr/local/apps/lib/libsodium.so.23 [0]
   1770602:	symbol=EVP_KDF_ctrl;  lookup in file=/usr/local/apps/php72/ext/sqlite3.so [0]
   1770602:	symbol=EVP_KDF_ctrl;  lookup in file=/usr/local/apps/php72/ext/sysvsem.so [0]
   1770602:	symbol=EVP_KDF_ctrl;  lookup in file=/usr/local/apps/php72/ext/sysvshm.so [0]
   1770602:	symbol=EVP_KDF_ctrl;  lookup in file=/usr/local/apps/php72/ext/tidy.so [0]
   1770602:	symbol=EVP_KDF_ctrl;  lookup in file=/usr/local/apps/php72/ext/tokenizer.so [0]
   1770602:	symbol=EVP_KDF_ctrl;  lookup in file=/usr/local/apps/php72/ext/wddx.so [0]
   1770602:	symbol=EVP_KDF_ctrl;  lookup in file=/usr/local/apps/php72/ext/xmlrpc.so [0]
   1770602:	symbol=EVP_KDF_ctrl;  lookup in file=/usr/local/apps/php72/ext/xsl.so [0]
   1770602:	symbol=EVP_KDF_ctrl;  lookup in file=/usr/local/apps/lib/libexslt.so.0 [0]
   1770602:	symbol=EVP_KDF_ctrl;  lookup in file=/usr/local/apps/lib/libxslt.so.1 [0]
   1770602:	symbol=EVP_KDF_ctrl;  lookup in file=/usr/local/apps/php72/ext/zip.so [0]
   1770602:	symbol=EVP_KDF_ctrl;  lookup in file=/usr/local/apps/php72/ext/zlib.so [0]
   1770602:	symbol=EVP_KDF_ctrl;  lookup in file=/usr/local/apps/php72/ext/redis.so [0]
   1770602:	symbol=EVP_KDF_ctrl;  lookup in file=/usr/local/apps/php72/ext/mcrypt.so [0]
   1770602:	symbol=EVP_KDF_ctrl;  lookup in file=/usr/local/apps/lib/libmcrypt.so.4 [0]
   1770602:	symbol=EVP_KDF_ctrl;  lookup in file=/usr/local/apps/lib/libltdl.so.7 [0]
   1770602:	symbol=EVP_KDF_ctrl;  lookup in file=/usr/local/apps/php72/ext/sqlsrv.so [0]
   1770602:	symbol=EVP_KDF_ctrl;  lookup in file=/lib64/libodbc.so.2 [0]
   1770602:	symbol=EVP_KDF_ctrl;  lookup in file=/lib64/libodbcinst.so.2 [0]
   1770602:	symbol=EVP_KDF_ctrl;  lookup in file=/usr/local/apps/php72/ext/pdo_sqlsrv.so [0]
   1770602:	symbol=EVP_KDF_ctrl;  lookup in file=/usr/local/apps/php72/ext/imagick.so [0]
   1770602:	symbol=EVP_KDF_ctrl;  lookup in file=/usr/local/apps/imagemagick/lib/libMagickWand-7.Q16HDRI.so.5 [0]
   1770602:	symbol=EVP_KDF_ctrl;  lookup in file=/usr/local/apps/imagemagick/lib/libMagickCore-7.Q16HDRI.so.5 [0]
   1770602:	symbol=EVP_KDF_ctrl;  lookup in file=/lib64/libgomp.so.1 [0]
   1770602:	symbol=EVP_KDF_ctrl;  lookup in file=/opt/microsoft/msodbcsql17/lib64/libmsodbcsql-17.10.so.2.1 [0]
   1770602:	symbol=EVP_KDF_ctrl;  lookup in file=/lib64/libk5crypto.so.3.webuzo [0]
   1770602:	symbol=EVP_KDF_ctrl;  lookup in file=/lib64/libdl.so.2 [0]
   1770602:	symbol=EVP_KDF_ctrl;  lookup in file=/lib64/librt.so.1 [0]
   1770602:	symbol=EVP_KDF_ctrl;  lookup in file=/lib64/libodbcinst.so.2 [0]
   1770602:	symbol=EVP_KDF_ctrl;  lookup in file=/lib64/libkrb5.so.3 [0]
   1770602:	symbol=EVP_KDF_ctrl;  lookup in file=/lib64/libgssapi_krb5.so.2 [0]
   1770602:	symbol=EVP_KDF_ctrl;  lookup in file=/lib64/libstdc++.so.6 [0]
   1770602:	symbol=EVP_KDF_ctrl;  lookup in file=/lib64/libm.so.6 [0]
   1770602:	symbol=EVP_KDF_ctrl;  lookup in file=/lib64/libgcc_s.so.1 [0]
   1770602:	symbol=EVP_KDF_ctrl;  lookup in file=/lib64/libpthread.so.0 [0]
   1770602:	symbol=EVP_KDF_ctrl;  lookup in file=/lib64/libc.so.6 [0]
   1770602:	symbol=EVP_KDF_ctrl;  lookup in file=/lib64/libkrb5support.so.0 [0]
   1770602:	symbol=EVP_KDF_ctrl;  lookup in file=/lib64/libkeyutils.so.1 [0]
   1770602:	symbol=EVP_KDF_ctrl;  lookup in file=/usr/local/apps/openssl-11/lib/libcrypto.so.1.1 [0]
   1770602:	symbol=EVP_KDF_ctrl;  lookup in file=/lib64/libresolv.so.2 [0]
   1770602:	symbol=EVP_KDF_ctrl;  lookup in file=/lib64/ld-linux-x86-64.so.2 [0]
   1770602:	symbol=EVP_KDF_ctrl;  lookup in file=/usr/local/apps/lib/libltdl.so.7 [0]
   1770602:	symbol=EVP_KDF_ctrl;  lookup in file=/lib64/libcom_err.so.2 [0]
   1770602:	symbol=EVP_KDF_ctrl;  lookup in file=/lib64/libselinux.so.1 [0]
   1770602:	symbol=EVP_KDF_ctrl;  lookup in file=/lib64/libpcre2-8.so.0 [0]
   1770602:	/lib64/libk5crypto.so.3.webuzo: error: symbol lookup error: undefined symbol: EVP_KDF_ctrl, version OPENSSL_1_1_1b (fatal)
   1770602:	
   1770602:	file=/opt/microsoft/msodbcsql17/lib64/libmsodbcsql-17.10.so.2.1 [0];  destroying link map
   1770602:	
   1770602:	file=/lib64/libgssapi_krb5.so.2 [0];  destroying link map
   1770602:	
   1770602:	file=/lib64/libkrb5.so.3 [0];  destroying link map
   1770602:	
   1770602:	file=/lib64/libk5crypto.so.3.webuzo [0];  destroying link map
   1770602:	
   1770602:	file=/lib64/libkrb5support.so.0 [0];  destroying link map
   1770602:	
   1770602:	file=/lib64/libkeyutils.so.1 [0];  destroying link map
   1770602:	
   1770602:	file=/lib64/libcom_err.so.2 [0];  destroying link map
   1770602:	
   1770602:	file=/lib64/libselinux.so.1 [0];  destroying link map
   1770602:	
   1770602:	file=/lib64/libpcre2-8.so.0 [0];  destroying link map

/lib64/libkrb5.so.3 NEEDED by libmsodbcsql, libcrypto.so.1.1 is NEEDED by /lib64/libkrb5.so.3

/lib64/libkrb5.so.3 is loading libcrypto.so.1.1 from /usr/local/apps/openssl-11/lib/libcrypto.so.1.1 insted of /lib64/libcrypto.so.1.1 and Setting LD_LIBRARY_PATH, PATH doesn't work

What could be solution of it ?

@lurcher
Copy link
Owner

lurcher commented Feb 19, 2023 via email

@GaneshKandu
Copy link
Author

GaneshKandu commented Feb 19, 2023

try using ldd to see what libs are needed.

ldd -v /opt/microsoft/msodbcsql18/lib64/libmsodbcsql-18.2.so.1.1
        linux-vdso.so.1 (0x00007ffceb3ec000)
        libdl.so.2 => /lib64/libdl.so.2 (0x00007fd8704fe000)
        librt.so.1 => /lib64/librt.so.1 (0x00007fd8702f6000)
        libodbcinst.so.2 => /lib64/libodbcinst.so.2 (0x00007fd8700e2000)
        libkrb5.so.3 => /lib64/libkrb5.so.3 (0x00007fd86fdf8000)
        libgssapi_krb5.so.2 => /lib64/libgssapi_krb5.so.2 (0x00007fd86fba3000)
        libstdc++.so.6 => /lib64/libstdc++.so.6 (0x00007fd86f80e000)
        libm.so.6 => /lib64/libm.so.6 (0x00007fd86f48c000)
        libgcc_s.so.1 => /lib64/libgcc_s.so.1 (0x00007fd86f274000)
        libpthread.so.0 => /lib64/libpthread.so.0 (0x00007fd86f054000)
        libc.so.6 => /lib64/libc.so.6 (0x00007fd86ec8e000)
        /lib64/ld-linux-x86-64.so.2 (0x00007fd870b12000)
        libltdl.so.7 => /lib64/libltdl.so.7 (0x00007fd86ea84000)
        libk5crypto.so.3 => /lib64/libk5crypto.so.3 (0x00007fd86e86d000)
        libcom_err.so.2 => /lib64/libcom_err.so.2 (0x00007fd86e669000)
        libkrb5support.so.0 => /lib64/libkrb5support.so.0 (0x00007fd86e458000)
        libkeyutils.so.1 => /lib64/libkeyutils.so.1 (0x00007fd86e237000)
        libcrypto.so.1.1 => /lib64/libcrypto.so.1.1 (0x00007fd86dd4e000)
        libresolv.so.2 => /lib64/libresolv.so.2 (0x00007fd86db36000)
        libselinux.so.1 => /lib64/libselinux.so.1 (0x00007fd86d90b000)
        libz.so.1 => /lib64/libz.so.1 (0x00007fd86d6f3000)
        libpcre2-8.so.0 => /lib64/libpcre2-8.so.0 (0x00007fd86d46f000)

        Version information:
        /opt/microsoft/msodbcsql18/lib64/libmsodbcsql-18.2.so.1.1:
                librt.so.1 (GLIBC_2.2.5) => /lib64/librt.so.1
                libgcc_s.so.1 (GCC_3.0) => /lib64/libgcc_s.so.1
                libm.so.6 (GLIBC_2.2.5) => /lib64/libm.so.6
                libdl.so.2 (GLIBC_2.2.5) => /lib64/libdl.so.2
                libgssapi_krb5.so.2 (gssapi_krb5_2_MIT) => /lib64/libgssapi_krb5.so.2
                libkrb5.so.3 (krb5_3_MIT) => /lib64/libkrb5.so.3
                libpthread.so.0 (GLIBC_2.3.2) => /lib64/libpthread.so.0
                libpthread.so.0 (GLIBC_2.2.5) => /lib64/libpthread.so.0
                libc.so.6 (GLIBC_2.4) => /lib64/libc.so.6
                libc.so.6 (GLIBC_2.2.5) => /lib64/libc.so.6
                libstdc++.so.6 (CXXABI_1.3.3) => /lib64/libstdc++.so.6
                libstdc++.so.6 (CXXABI_1.3) => /lib64/libstdc++.so.6
                libstdc++.so.6 (GLIBCXX_3.4) => /lib64/libstdc++.so.6
        /lib64/libdl.so.2:
                ld-linux-x86-64.so.2 (GLIBC_PRIVATE) => /lib64/ld-linux-x86-64.so.2
                libc.so.6 (GLIBC_PRIVATE) => /lib64/libc.so.6
                libc.so.6 (GLIBC_2.4) => /lib64/libc.so.6
                libc.so.6 (GLIBC_2.2.5) => /lib64/libc.so.6
        /lib64/librt.so.1:
                libpthread.so.0 (GLIBC_2.3.2) => /lib64/libpthread.so.0
                libpthread.so.0 (GLIBC_PRIVATE) => /lib64/libpthread.so.0
                libpthread.so.0 (GLIBC_2.2.5) => /lib64/libpthread.so.0
                libc.so.6 (GLIBC_2.14) => /lib64/libc.so.6
                libc.so.6 (GLIBC_2.3.2) => /lib64/libc.so.6
                libc.so.6 (GLIBC_2.4) => /lib64/libc.so.6
                libc.so.6 (GLIBC_2.2.5) => /lib64/libc.so.6
                libc.so.6 (GLIBC_PRIVATE) => /lib64/libc.so.6
        /lib64/libodbcinst.so.2:
                libpthread.so.0 (GLIBC_2.2.5) => /lib64/libpthread.so.0
                libc.so.6 (GLIBC_2.3) => /lib64/libc.so.6
                libc.so.6 (GLIBC_2.2.5) => /lib64/libc.so.6
        /lib64/libkrb5.so.3:
                libkeyutils.so.1 (KEYUTILS_1.0) => /lib64/libkeyutils.so.1
                libkeyutils.so.1 (KEYUTILS_1.5) => /lib64/libkeyutils.so.1
                libkeyutils.so.1 (KEYUTILS_0.3) => /lib64/libkeyutils.so.1
                libresolv.so.2 (GLIBC_2.2.5) => /lib64/libresolv.so.2
                libkrb5support.so.0 (krb5support_0_MIT) => /lib64/libkrb5support.so.0
                libc.so.6 (GLIBC_2.14) => /lib64/libc.so.6
                libc.so.6 (GLIBC_2.4) => /lib64/libc.so.6
                libc.so.6 (GLIBC_2.25) => /lib64/libc.so.6
                libc.so.6 (GLIBC_2.8) => /lib64/libc.so.6
                libc.so.6 (GLIBC_2.17) => /lib64/libc.so.6
                libc.so.6 (GLIBC_2.3) => /lib64/libc.so.6
                libc.so.6 (GLIBC_2.16) => /lib64/libc.so.6
                libc.so.6 (GLIBC_2.3.4) => /lib64/libc.so.6
                libc.so.6 (GLIBC_2.2.5) => /lib64/libc.so.6
                libk5crypto.so.3 (k5crypto_3_MIT) => /lib64/libk5crypto.so.3
        /lib64/libgssapi_krb5.so.2:
                libc.so.6 (GLIBC_2.14) => /lib64/libc.so.6
                libc.so.6 (GLIBC_2.27) => /lib64/libc.so.6
                libc.so.6 (GLIBC_2.4) => /lib64/libc.so.6
                libc.so.6 (GLIBC_2.25) => /lib64/libc.so.6
                libc.so.6 (GLIBC_2.3) => /lib64/libc.so.6
                libc.so.6 (GLIBC_2.8) => /lib64/libc.so.6
                libc.so.6 (GLIBC_2.17) => /lib64/libc.so.6
                libc.so.6 (GLIBC_2.3.4) => /lib64/libc.so.6
                libc.so.6 (GLIBC_2.2.5) => /lib64/libc.so.6
                libkrb5support.so.0 (krb5support_0_MIT) => /lib64/libkrb5support.so.0
                libk5crypto.so.3 (k5crypto_3_MIT) => /lib64/libk5crypto.so.3
                libkrb5.so.3 (krb5_3_MIT) => /lib64/libkrb5.so.3
        /lib64/libstdc++.so.6:
                libm.so.6 (GLIBC_2.2.5) => /lib64/libm.so.6
                ld-linux-x86-64.so.2 (GLIBC_2.3) => /lib64/ld-linux-x86-64.so.2
                libgcc_s.so.1 (GCC_4.2.0) => /lib64/libgcc_s.so.1
                libgcc_s.so.1 (GCC_3.3) => /lib64/libgcc_s.so.1
                libgcc_s.so.1 (GCC_3.0) => /lib64/libgcc_s.so.1
                libc.so.6 (GLIBC_2.14) => /lib64/libc.so.6
                libc.so.6 (GLIBC_2.4) => /lib64/libc.so.6
                libc.so.6 (GLIBC_2.18) => /lib64/libc.so.6
                libc.so.6 (GLIBC_2.16) => /lib64/libc.so.6
                libc.so.6 (GLIBC_2.3) => /lib64/libc.so.6
                libc.so.6 (GLIBC_2.17) => /lib64/libc.so.6
                libc.so.6 (GLIBC_2.3.2) => /lib64/libc.so.6
                libc.so.6 (GLIBC_2.2.5) => /lib64/libc.so.6
        /lib64/libm.so.6:
                ld-linux-x86-64.so.2 (GLIBC_PRIVATE) => /lib64/ld-linux-x86-64.so.2
                libc.so.6 (GLIBC_2.4) => /lib64/libc.so.6
                libc.so.6 (GLIBC_2.2.5) => /lib64/libc.so.6
                libc.so.6 (GLIBC_PRIVATE) => /lib64/libc.so.6
        /lib64/libgcc_s.so.1:
                libc.so.6 (GLIBC_2.14) => /lib64/libc.so.6
                libc.so.6 (GLIBC_2.2.5) => /lib64/libc.so.6
        /lib64/libpthread.so.0:
                ld-linux-x86-64.so.2 (GLIBC_2.2.5) => /lib64/ld-linux-x86-64.so.2
                ld-linux-x86-64.so.2 (GLIBC_PRIVATE) => /lib64/ld-linux-x86-64.so.2
                libc.so.6 (GLIBC_2.14) => /lib64/libc.so.6
                libc.so.6 (GLIBC_2.3.2) => /lib64/libc.so.6
                libc.so.6 (GLIBC_2.4) => /lib64/libc.so.6
                libc.so.6 (GLIBC_2.2.5) => /lib64/libc.so.6
                libc.so.6 (GLIBC_PRIVATE) => /lib64/libc.so.6
        /lib64/libc.so.6:
                ld-linux-x86-64.so.2 (GLIBC_2.3) => /lib64/ld-linux-x86-64.so.2
                ld-linux-x86-64.so.2 (GLIBC_PRIVATE) => /lib64/ld-linux-x86-64.so.2
        /lib64/libltdl.so.7:
                libdl.so.2 (GLIBC_2.2.5) => /lib64/libdl.so.2
                libc.so.6 (GLIBC_2.3.4) => /lib64/libc.so.6
                libc.so.6 (GLIBC_2.3) => /lib64/libc.so.6
                libc.so.6 (GLIBC_2.14) => /lib64/libc.so.6
                libc.so.6 (GLIBC_2.4) => /lib64/libc.so.6
                libc.so.6 (GLIBC_2.2.5) => /lib64/libc.so.6
        /lib64/libk5crypto.so.3:
                libkrb5support.so.0 (krb5support_0_MIT) => /lib64/libkrb5support.so.0
                libc.so.6 (GLIBC_2.14) => /lib64/libc.so.6
                libc.so.6 (GLIBC_2.4) => /lib64/libc.so.6
                libc.so.6 (GLIBC_2.25) => /lib64/libc.so.6
                libc.so.6 (GLIBC_2.2.5) => /lib64/libc.so.6
                libcrypto.so.1.1 (OPENSSL_1_1_1b) => /lib64/libcrypto.so.1.1
                libcrypto.so.1.1 (OPENSSL_1_1_0) => /lib64/libcrypto.so.1.1
        /lib64/libcom_err.so.2:
                ld-linux-x86-64.so.2 (GLIBC_2.3) => /lib64/ld-linux-x86-64.so.2
                libpthread.so.0 (GLIBC_2.2.5) => /lib64/libpthread.so.0
                libc.so.6 (GLIBC_2.4) => /lib64/libc.so.6
                libc.so.6 (GLIBC_2.17) => /lib64/libc.so.6
                libc.so.6 (GLIBC_2.3.4) => /lib64/libc.so.6
                libc.so.6 (GLIBC_2.2.5) => /lib64/libc.so.6
        /lib64/libkrb5support.so.0:
                libdl.so.2 (GLIBC_2.2.5) => /lib64/libdl.so.2
                libc.so.6 (GLIBC_2.7) => /lib64/libc.so.6
                libc.so.6 (GLIBC_2.14) => /lib64/libc.so.6
                libc.so.6 (GLIBC_2.4) => /lib64/libc.so.6
                libc.so.6 (GLIBC_2.25) => /lib64/libc.so.6
                libc.so.6 (GLIBC_2.3) => /lib64/libc.so.6
                libc.so.6 (GLIBC_2.8) => /lib64/libc.so.6
                libc.so.6 (GLIBC_2.3.4) => /lib64/libc.so.6
                libc.so.6 (GLIBC_2.2.5) => /lib64/libc.so.6
        /lib64/libkeyutils.so.1:
                libc.so.6 (GLIBC_2.2.5) => /lib64/libc.so.6
        /lib64/libcrypto.so.1.1:
                libdl.so.2 (GLIBC_2.2.5) => /lib64/libdl.so.2
                libpthread.so.0 (GLIBC_2.2.5) => /lib64/libpthread.so.0
                libc.so.6 (GLIBC_2.14) => /lib64/libc.so.6
                libc.so.6 (GLIBC_2.4) => /lib64/libc.so.6
                libc.so.6 (GLIBC_2.3) => /lib64/libc.so.6
                libc.so.6 (GLIBC_2.3.2) => /lib64/libc.so.6
                libc.so.6 (GLIBC_2.7) => /lib64/libc.so.6
                libc.so.6 (GLIBC_2.3.4) => /lib64/libc.so.6
                libc.so.6 (GLIBC_2.17) => /lib64/libc.so.6
                libc.so.6 (GLIBC_2.16) => /lib64/libc.so.6
                libc.so.6 (GLIBC_2.2.5) => /lib64/libc.so.6
        /lib64/libresolv.so.2:
                libc.so.6 (GLIBC_2.14) => /lib64/libc.so.6
                libc.so.6 (GLIBC_2.4) => /lib64/libc.so.6
                libc.so.6 (GLIBC_PRIVATE) => /lib64/libc.so.6
                libc.so.6 (GLIBC_2.2.5) => /lib64/libc.so.6
                libc.so.6 (GLIBC_2.3) => /lib64/libc.so.6
        /lib64/libselinux.so.1:
                libdl.so.2 (GLIBC_2.2.5) => /lib64/libdl.so.2
                ld-linux-x86-64.so.2 (GLIBC_2.3) => /lib64/ld-linux-x86-64.so.2
                libc.so.6 (GLIBC_2.14) => /lib64/libc.so.6
                libc.so.6 (GLIBC_2.8) => /lib64/libc.so.6
                libc.so.6 (GLIBC_2.4) => /lib64/libc.so.6
                libc.so.6 (GLIBC_2.7) => /lib64/libc.so.6
                libc.so.6 (GLIBC_2.3) => /lib64/libc.so.6
                libc.so.6 (GLIBC_2.2.5) => /lib64/libc.so.6
                libc.so.6 (GLIBC_2.3.4) => /lib64/libc.so.6
        /lib64/libz.so.1:
                libc.so.6 (GLIBC_2.14) => /lib64/libc.so.6
                libc.so.6 (GLIBC_2.4) => /lib64/libc.so.6
                libc.so.6 (GLIBC_2.2.5) => /lib64/libc.so.6
                libc.so.6 (GLIBC_2.3.4) => /lib64/libc.so.6
        /lib64/libpcre2-8.so.0:
                libpthread.so.0 (GLIBC_2.2.5) => /lib64/libpthread.so.0
                libc.so.6 (GLIBC_2.14) => /lib64/libc.so.6
                libc.so.6 (GLIBC_2.3.4) => /lib64/libc.so.6
                libc.so.6 (GLIBC_2.4) => /lib64/libc.so.6
                libc.so.6 (GLIBC_2.2.5) => /lib64/libc.so.6
                libc.so.6 (GLIBC_2.3) => /lib64/libc.so.6

see but with PHP it load /usr/local/apps/openssl-11/lib/libcrypto.so.1.1 insted of /lib64/libcrypto.so.1.1
getting this error on almalinux only.

@GaneshKandu
Copy link
Author

ldd -v msodbcsql
i noticed libk5crypto.so.3 Need libcrypto.so.1.1 on Almalinux only

On CentOS and Ubuntu libk5crypto.so.3 doesn't load libcrypto.so.1.1

@lurcher
Copy link
Owner

lurcher commented Feb 19, 2023 via email

@kadler
Copy link
Contributor

kadler commented Feb 20, 2023

I've seen this before with Microsoft's ODBC drivers. When loading in to Node.js on Red Hat, the OpenSSL libraries used by Node conflict with those that the driver wants to use. The problem is really with the driver (really with ELF, but you're not changing that). If the driver doesn't want conflicts, it needs to either a) use the system libraries or b) dlopen() its vendor libraries instead of directly linking to them.

@lurcher
Copy link
Owner

lurcher commented Feb 20, 2023 via email

@kadler
Copy link
Contributor

kadler commented Feb 20, 2023

Well usually distro packages are built against the same version of OpenSSL, so they should work cohesively but I see now that PHP is coming from /usr/local/apps, so presumably not a distro package. It's pulling in OpenSSL 3 libraries, but trying to use Kerberos libraries from the system which are linked to OpenSSL 1.1.

Yep, this is the equivalent of "DLL Hell" on Linux and other ELF platforms. Whichever symbol gets loaded first wins, so you can't really load libraries that link to different versions of OpenSSL in the same process. The only real way to get around this that I know of is to dlopen it and dlsym the functions you need, which was why I suggest this for the driver.

@lurcher I think your suggestion is correct. Likely need to either rebuild Kerberos to use OpenSSL 3 (likely still issues once the driver gets loaded and wants its own OpenSSL 1.1 libraries) or rebuild PHP, etc with OpenSSL 1.1. And yes, this is definitely a packager issue not a unixODBC issue.

@v-chojas
Copy link
Contributor

Later versions of the msodbcsql17 and msodbcsql18 are flexible and will use the latest OpenSSL available on the system, precisely to avoid this problem, but it looks like in this case it's the other libs it depends on which have conflicting OpenSSL versions.

https://learn.microsoft.com/en-us/sql/connect/odbc/linux-mac/programming-guidelines#bkmk-openssl

@GaneshKandu
Copy link
Author

Later versions of the msodbcsql17 and msodbcsql18 are flexible and will use the latest OpenSSL available on the system, precisely to avoid this problem, but it looks like in this case it's the other libs it depends on which have conflicting OpenSSL versions.

https://learn.microsoft.com/en-us/sql/connect/odbc/linux-mac/programming-guidelines#bkmk-openssl

Its system's libk5crypto.so.3 who is loading libcrypto.so.1.1 from custom path php build with, whereas it should be load from system's libcrypto.so.1.1

dlopen passes program's env setting's to loaded libraries that's why libmsodbcsql-18.2.so.1.1 is using that env and loading libcrypto.so.1.1 from php is build to load.

I think libmsodbcsql-18.2.so.1.1 is not open source, we can not build it our own andlibmsodbcsql-18.2.so.1.1 should handle it by setting its env blank.

@v-chojas
Copy link
Contributor

Transitive dependencies are not something we have any control over.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

4 participants