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

Reply via email to