Skip to content

error compiling curl with my own openssl version #1420

@tessus

Description

@tessus

I did this

  • compiled OpenSSL 1.0.2k: ./config -fPIC
  • configured curl 7.53.1: ./configure --with-ssl=/usr/local/ssl see config.log

make abended:

make V=1
Making all in lib
make[1]: Entering directory `/data/tessus/work/curl-7.53.1/lib'
make  all-am
make[2]: Entering directory `/data/tessus/work/curl-7.53.1/lib'
make[2]: Leaving directory `/data/tessus/work/curl-7.53.1/lib'
make[1]: Leaving directory `/data/tessus/work/curl-7.53.1/lib'
Making all in src
make[1]: Entering directory `/data/tessus/work/curl-7.53.1/src'
make  all-am
make[2]: Entering directory `/data/tessus/work/curl-7.53.1/src'
/bin/sh ../libtool  --tag=CC   --mode=link gcc  -O2 -Wno-system-headers   -L/usr/lib64 -L/usr/local/ssl/lib -o curl curl-slist_wc.o curl-tool_binmode.o curl-tool_bname.o curl-tool_cb_dbg.o curl-tool_cb_hdr.o curl-tool_cb_prg.o curl-tool_cb_rea.o curl-tool_cb_see.o curl-tool_cb_wrt.o curl-tool_cfgable.o curl-tool_convert.o curl-tool_dirhie.o curl-tool_doswin.o curl-tool_easysrc.o curl-tool_formparse.o curl-tool_getparam.o curl-tool_getpass.o curl-tool_help.o curl-tool_helpers.o curl-tool_homedir.o curl-tool_hugehelp.o curl-tool_libinfo.o curl-tool_main.o curl-tool_metalink.o curl-tool_mfiles.o curl-tool_msgs.o curl-tool_operate.o curl-tool_operhlp.o curl-tool_panykey.o curl-tool_paramhlp.o curl-tool_parsecfg.o curl-tool_strdup.o curl-tool_setopt.o curl-tool_sleep.o curl-tool_urlglob.o curl-tool_util.o curl-tool_vms.o curl-tool_writeenv.o curl-tool_writeout.o curl-tool_xattr.o ../lib/curl-strtoofft.o ../lib/curl-nonblock.o ../lib/curl-warnless.o  ../lib/libcurl.la   -lssl -lcrypto  -lz
libtool: link: gcc -O2 -Wno-system-headers -o .libs/curl curl-slist_wc.o curl-tool_binmode.o curl-tool_bname.o curl-tool_cb_dbg.o curl-tool_cb_hdr.o curl-tool_cb_prg.o curl-tool_cb_rea.o curl-tool_cb_see.o curl-tool_cb_wrt.o curl-tool_cfgable.o curl-tool_convert.o curl-tool_dirhie.o curl-tool_doswin.o curl-tool_easysrc.o curl-tool_formparse.o curl-tool_getparam.o curl-tool_getpass.o curl-tool_help.o curl-tool_helpers.o curl-tool_homedir.o curl-tool_hugehelp.o curl-tool_libinfo.o curl-tool_main.o curl-tool_metalink.o curl-tool_mfiles.o curl-tool_msgs.o curl-tool_operate.o curl-tool_operhlp.o curl-tool_panykey.o curl-tool_paramhlp.o curl-tool_parsecfg.o curl-tool_strdup.o curl-tool_setopt.o curl-tool_sleep.o curl-tool_urlglob.o curl-tool_util.o curl-tool_vms.o curl-tool_writeenv.o curl-tool_writeout.o curl-tool_xattr.o ../lib/curl-strtoofft.o ../lib/curl-nonblock.o ../lib/curl-warnless.o  -L/usr/lib64 -L/usr/local/ssl/lib ../lib/.libs/libcurl.so -lssl -lcrypto -lz
../lib/.libs/libcurl.so: undefined reference to `SSL_get0_alpn_selected'
../lib/.libs/libcurl.so: undefined reference to `SSL_COMP_free_compression_methods'
../lib/.libs/libcurl.so: undefined reference to `SSL_CTX_set_alpn_protos'
collect2: error: ld returned 1 exit status
make[2]: *** [curl] Error 1
make[2]: Leaving directory `/data/tessus/work/curl-7.53.1/src'
make[1]: *** [all] Error 2
make[1]: Leaving directory `/data/tessus/work/curl-7.53.1/src'
make: *** [all-recursive] Error 1

I changed the order of the library paths and added -ldl:

/bin/sh ../libtool  --tag=CC   --mode=link gcc  -O2 -Wno-system-headers -L/usr/local/ssl/lib -L/usr/lib64 -o curl curl-slist_wc.o curl-tool_binmode.o curl-tool_bname.o curl-tool_cb_dbg.o curl-tool_cb_hdr.o curl-tool_cb_prg.o curl-tool_cb_rea.o curl-tool_cb_see.o curl-tool_cb_wrt.o curl-tool_cfgable.o curl-tool_convert.o curl-tool_dirhie.o curl-tool_doswin.o curl-tool_easysrc.o curl-tool_formparse.o curl-tool_getparam.o curl-tool_getpass.o curl-tool_help.o curl-tool_helpers.o curl-tool_homedir.o curl-tool_hugehelp.o curl-tool_libinfo.o curl-tool_main.o curl-tool_metalink.o curl-tool_mfiles.o curl-tool_msgs.o curl-tool_operate.o curl-tool_operhlp.o curl-tool_panykey.o curl-tool_paramhlp.o curl-tool_parsecfg.o curl-tool_strdup.o curl-tool_setopt.o curl-tool_sleep.o curl-tool_urlglob.o curl-tool_util.o curl-tool_vms.o curl-tool_writeenv.o curl-tool_writeout.o curl-tool_xattr.o ../lib/curl-strtoofft.o ../lib/curl-nonblock.o ../lib/curl-warnless.o  ../lib/libcurl.la   -lssl -lcrypto  -lz -ldl
libtool: link: gcc -O2 -Wno-system-headers -o .libs/curl curl-slist_wc.o curl-tool_binmode.o curl-tool_bname.o curl-tool_cb_dbg.o curl-tool_cb_hdr.o curl-tool_cb_prg.o curl-tool_cb_rea.o curl-tool_cb_see.o curl-tool_cb_wrt.o curl-tool_cfgable.o curl-tool_convert.o curl-tool_dirhie.o curl-tool_doswin.o curl-tool_easysrc.o curl-tool_formparse.o curl-tool_getparam.o curl-tool_getpass.o curl-tool_help.o curl-tool_helpers.o curl-tool_homedir.o curl-tool_hugehelp.o curl-tool_libinfo.o curl-tool_main.o curl-tool_metalink.o curl-tool_mfiles.o curl-tool_msgs.o curl-tool_operate.o curl-tool_operhlp.o curl-tool_panykey.o curl-tool_paramhlp.o curl-tool_parsecfg.o curl-tool_strdup.o curl-tool_setopt.o curl-tool_sleep.o curl-tool_urlglob.o curl-tool_util.o curl-tool_vms.o curl-tool_writeenv.o curl-tool_writeout.o curl-tool_xattr.o ../lib/curl-strtoofft.o ../lib/curl-nonblock.o ../lib/curl-warnless.o  -L/usr/local/ssl/lib -L/usr/lib64 ../lib/.libs/libcurl.so -lssl -lcrypto -lz -ldl

This worked.

However, as you can see the curl output still reports the wrong openssl version:

./curl -V
curl 7.53.1 (x86_64-pc-linux-gnu) libcurl/7.53.1 OpenSSL/1.0.1e zlib/1.2.8 libssh2/1.5.0
Protocols: dict file ftp ftps gopher http https imap imaps ldap ldaps pop3 pop3s rtsp scp sftp smb smbs smtp smtps telnet tftp
Features: IPv6 Largefile NTLM NTLM_WB SSL libz UnixSockets HTTPS-proxy

The curl binary is static, so I have no idea which libraries were really linked.

Checking the shared library:

ldd libcurl.so
        linux-vdso.so.1 =>  (0x00007fff07964000)
        libssh2.so.1 => /lib64/libssh2.so.1 (0x00007ff45adc8000)
        libssl.so.10 => /lib64/libssl.so.10 (0x00007ff45ab5a000)
        libcrypto.so.10 => /lib64/libcrypto.so.10 (0x00007ff45a772000)
        liblber-2.4.so.2 => /lib64/liblber-2.4.so.2 (0x00007ff45a563000)
        libldap-2.4.so.2 => /lib64/libldap-2.4.so.2 (0x00007ff45a310000)
        libz.so.1 => /lib64/libz.so.1 (0x00007ff45a0fa000)
        libc.so.6 => /lib64/libc.so.6 (0x00007ff459d3c000)
        libgssapi_krb5.so.2 => /lib64/libgssapi_krb5.so.2 (0x00007ff459af1000)
        libkrb5.so.3 => /lib64/libkrb5.so.3 (0x00007ff459811000)
        libcom_err.so.2 => /lib64/libcom_err.so.2 (0x00007ff45960d000)
        libk5crypto.so.3 => /lib64/libk5crypto.so.3 (0x00007ff4593d7000)
        libdl.so.2 => /lib64/libdl.so.2 (0x00007ff4591d3000)
        libresolv.so.2 => /lib64/libresolv.so.2 (0x00007ff458fb9000)
        libsasl2.so.3 => /lib64/libsasl2.so.3 (0x00007ff458d9b000)
        libssl3.so => /lib64/libssl3.so (0x00007ff458b5c000)
        libsmime3.so => /lib64/libsmime3.so (0x00007ff458935000)
        libnss3.so => /lib64/libnss3.so (0x00007ff45860d000)
        libnssutil3.so => /lib64/libnssutil3.so (0x00007ff4583e1000)
        libplds4.so => /lib64/libplds4.so (0x00007ff4581dd000)
        libplc4.so => /lib64/libplc4.so (0x00007ff457fd7000)
        libnspr4.so => /lib64/libnspr4.so (0x00007ff457d99000)
        libpthread.so.0 => /lib64/libpthread.so.0 (0x00007ff457b7c000)
        /lib64/ld-linux-x86-64.so.2 (0x00000036d1e00000)
        libkrb5support.so.0 => /lib64/libkrb5support.so.0 (0x00007ff45796d000)
        libkeyutils.so.1 => /lib64/libkeyutils.so.1 (0x00007ff457769000)
        libcrypt.so.1 => /lib64/libcrypt.so.1 (0x00007ff457531000)
        librt.so.1 => /lib64/librt.so.1 (0x00007ff457329000)
        libselinux.so.1 => /lib64/libselinux.so.1 (0x00007ff457104000)
        libfreebl3.so => /lib64/libfreebl3.so (0x00007ff456e87000)
        libpcre.so.1 => /lib64/libpcre.so.1 (0x00007ff456c21000)
        liblzma.so.5 => /lib64/liblzma.so.5 (0x00007ff4569fb000)

As you can see, the shared library references my system's openssl libraries and not the ones which I specified in the configure option.

configure found my openssl libraries, but I can also see another issue here:

configure:22167: PKG_CONFIG_LIBDIR will be set to "/usr/local/ssl/lib/pkgconfig"
configure:22235: checking for pkg-config
configure:22266: result: /usr/bin/pkg-config
configure:22291: checking for openssl options with pkg-config
configure:22305: result: found
configure:22334: pkg-config: SSL_LIBS: "-lssl -lcrypto "
configure:22336: pkg-config: SSL_LDFLAGS: "-L/usr/local/ssl/lib "
configure:22338: pkg-config: SSL_CPPFLAGS: "-I/usr/local/ssl/include "
configure:22350: checking for HMAC_Update in -lcrypto
configure:22372: gcc -o conftest -O2 -Wno-system-headers   -I/usr/local/ssl/include  -L/usr/lib64   -L/usr/local/ssl/lib  conftest.c -lcrypto  -lssl -lcrypto  -llber -lldap -lz  >&5
configure:22372: $? = 0
configure:22381: result: yes
configure:22443: checking OpenSSL linking without -ldl
configure:22460: gcc -o conftest -O2 -Wno-system-headers   -I/usr/local/ssl/include  -L/usr/lib64   -L/usr/local/ssl/lib  conftest.c -lcrypto -lssl -lcrypto  -llber -lldap -lz  >&5
configure:22460: $? = 0
configure:22462: result: yes
configure:22514: checking for SSL_connect in -lssl
configure:22536: gcc -o conftest -O2 -Wno-system-headers   -I/usr/local/ssl/include  -L/usr/lib64   -L/usr/local/ssl/lib  conftest.c -lssl  -lcrypto -lssl -lcrypto  -llber -lldap -lz  >&5
configure:22536: $? = 0
configure:22545: result: yes

checking OpenSSL linking without -ldl -> result: yes

This can't be true, because I only have static openssl libraries in /usr/local/ssl/lib.

I also tried to create and use shared openssl libraries, but this changed nothing in regards to curl. The same error occurs and still only the system's openssl libs are referenced.

I expected the following

  • a working curl version linked to my openssl
  • a shared curl library that uses my openssl libs
    • dynamic openssl: libcurl.so should reference my openssl libs
    • static openssl: libcurl.so should include my static openssl and not reference any openssl libs at all

curl/libcurl version

curl-7.53.1 - https://curl.haxx.se/download/curl-7.53.1.tar.gz

operating system

Linux 3.16.3-200.fc20.x86_64 #1 SMP Wed Sep 17 22:34:21 UTC 2014 x86_64 x86_64 x86_64 GNU/Linux

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions