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

Reply via email to