On Mon, Oct 14, 2019 at 11:30 AM Nikita Popov <nikita....@gmail.com> wrote:
> 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. > This should be fixed with https://github.com/php/php-src/commit/c518932c0326a938f0fd0254f2adb03b1cddfbca. Now using just ./configure --disable-all --with-openssl OPENSSL_LIBS="-l:libssl.a -l:libcrypto.a -ldl -pthread" works for me. Nikita