How to resolve inconsistent linking of path-specified openssl libs into php bin and extenstions ?
| From: | PGNet Dev | Date: | Mon, 06 Mar 2017 20:54:29 +0000 |
| Subject: | How to resolve inconsistent linking of path-specified openssl libs into php bin and extenstions ? | ||
| Groups: | php.install | ||
| Request: | Send a blank email to php-install+get-20494@lists.php.net to get a copy of this message | ||
I'm working on php 7-1 with specific openssl versions/install paths.
When building with openssl ext, linking openssl 10 libs/headers from a local, non-system path, and
rpath'ing enabled
export EXTRA_LDFLAGS="-L/usr/local/openssl10/lib64"
export EXTRA_LIBS="-lssl -lscrypto"
CPPFLAGS="-I/usr/local/openssl10/include -I/usr/local/include -I/usr/include"
pkg-config openssl --libs --cflags
-I/usr/local/openssl10/include -L/usr/local/openssl10/lib64 -lssl -lcrypto
./configure \
--enable-rpath \
--enable-shared=yes --enable-static=no \
--with-openssl=shared --with-openssl-dir=/usr/local/openssl10 \
...
make
make install
correctly links the openssl.so to spec'd openssl libs
ldd openssl.so
linux-vdso.so.1 (0x00007fffdedef000)
!! libssl.so.1.0.0 => /usr/local/openssl10/lib64/libssl.so.1.0.0 (0x00007fdae69f5000)
!! libcrypto.so.1.0.0 => /usr/local/openssl10/lib64/libcrypto.so.1.0.0
(0x00007fdae6565000)
libc.so.6 => /lib64/libc.so.6 (0x00007fdae6162000)
libdl.so.2 => /lib64/libdl.so.2 (0x00007fdae5f5e000)
/lib64/ld-linux-x86-64.so.2 (0x0000556f88705000)
but
php -i
returns a mismatch
...
OpenSSL support => enabled
OpenSSL Library Version => OpenSSL 1.0.2j-fips 26 Sep 2016
OpenSSL Header Version => OpenSSL 1.0.2k 26 Jan 2017
Openssl default config => /etc/ssl/openssl.cnf
Directive => Local Value => Master Value
openssl.cafile => no value => no value
openssl.capath => /etc/ssl/certs => /etc/ssl/certs
...
checking
ldd
which php
linux-vdso.so.1 (0x00007ffe796a7000)
libcrypt.so.1 => /lib64/libcrypt.so.1 (0x00007fe781930000)
libresolv.so.2 => /lib64/libresolv.so.2 (0x00007fe781718000)
libstdc++.so.6 => /usr/lib64/libstdc++.so.6 (0x00007fe78132f000)
libpcre.so.1 => /usr/local/lib64/libpcre.so.1 (0x00007fe7810b5000)
librt.so.1 => /lib64/librt.so.1 (0x00007fe780eac000)
libm.so.6 => /lib64/libm.so.6 (0x00007fe780baf000)
libdl.so.2 => /lib64/libdl.so.2 (0x00007fe7809ab000)
libnsl.so.1 => /lib64/libnsl.so.1 (0x00007fe780792000)
libz.so.1 => /lib64/libz.so.1 (0x00007fe78057b000)
liblzma.so.5 => /usr/lib64/liblzma.so.5 (0x00007fe780352000)
libxml2.so.2 => /usr/lib64/libxml2.so.2 (0x00007fe77ffe6000)
!! libssl.so.1.0.0 => /lib64/libssl.so.1.0.0 (0x00007fe77fd7a000)
!! libcrypto.so.1.0.0 => /lib64/libcrypto.so.1.0.0 (0x00007fe77f920000)
libc.so.6 => /lib64/libc.so.6 (0x00007fe77f57c000)
/lib64/ld-linux-x86-64.so.2 (0x0000560dbbe7d000)
libgcc_s.so.1 => /lib64/libgcc_s.so.1 (0x00007fe77f365000)
libpthread.so.0 => /lib64/libpthread.so.0 (0x00007fe77f148000)
the php binary itself is incorrectly linked to system/distro, not specified libs.
If I instead set
export LDFLAGS="-L/usr/local/openssl10/lib64"
export LIBS="-lssl -lscrypto"
then
(1) the mismatch persists
AND
(2) EVERY ext.so built is linked to incorrect libs
ldd <any_ext>.so
...
libssl.so.1.0.0 => /lib64/libssl.so.1.0.0 (0x00007f29accae000)
libcrypto.so.1.0.0 => /lib64/libcrypto.so.1.0.0 (0x00007f29ac854000)
...
What combination of setting/flags are required to
(1) correctly link/rpath SPECIFIED openssl libs
(2) ensure matched headers & libs are detected & reported
(3) link ssl/crypto libs ONLY to bins/libs that *require* them
?