On Mon, Oct 14, 2019 at 11:22 AM Nikita Popov <nikita....@gmail.com> wrote:
> On Sun, Oct 13, 2019 at 11:04 PM Helmut K. C. Tessarek < > tessa...@evermeet.cx> wrote: > >> On 2019-10-13 17:00, Nikita Popov wrote: >> > Don't know about previous versions, but at least on 7.4 setting >> > OPENSSL_CFLAGS and OPENSSL_LIBS appropriately (e.g. using pkg-config >> > --static --cflags/--libs return values) should work. These environment >> > variables allow you to bypass normal pkg-config checks, which are >> generally >> > going to be non-static. >> >> I've tried pretty much anything, so if you have flags and env vars that >> work, >> please post them here. >> > > Here's what pkg-config --static tells me on my system: > > -lssl -lcrypto -ldl -pthread > > So I use this for OPENSSL_LIBS, while explicitly requesting the static .a > libs (on the assumption that only openssl should be linked statically, not > all libs): > > ./configure --disable-all --with-openssl OPENSSL_LIBS="-l:libssl.a > -l:libcrypto.a -ldl -pthread" > > configure passes, but then during linking I get: > > /usr/bin/ld: > /usr/lib/gcc/x86_64-linux-gnu/8/../../../x86_64-linux-gnu/libcrypto.a(threads_pthread.o): > undefined reference to symbol 'pthread_rwlock_wrlock@@GLIBC_2.2.5' > > It looks like the "-pthread" flag gets stripped. Then I tried: > > ./configure --disable-all --with-openssl OPENSSL_LIBS="-l:libssl.a > -l:libcrypto.a -ldl" CFLAGS="-pthread" > > This compiles successfully. > > > ldd sapi/cli/php > linux-vdso.so.1 (0x00007ffd1531f000) > libresolv.so.2 => /lib/x86_64-linux-gnu/libresolv.so.2 (0x00007f04b79a9000) > librt.so.1 => /lib/x86_64-linux-gnu/librt.so.1 (0x00007f04b77a1000) > libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f04b7403000) > libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f04b71ff000) > libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 > (0x00007f04b6fe0000) > libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f04b6bef000) > /lib64/ld-linux-x86-64.so.2 (0x00007f04b8bee000) > > The fact that "-pthread" gets stripped from LIBS might be a bug. > Looks like the -pthread stripping happens here: https://github.com/php/php-src/blob/5197d0cd5e1f4581db1beca1260e1315368ea911/build/php.m4#L371-L377 It doesn't get stripped as much as relocated to EXTRA_LDFLAGS (for static builds, for shared it goes into SHARED_LIBADD). However EXTRA_LDFLAGS is only used when linking libraries, while programs use EXTRA_LDFLAGS_PROGRAM. This seems like an oversight, and it should be added to both. Nikita