Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Some OpenSSL configure tests not linking OpenSSL #2199

Closed
MarcelRaad opened this issue Dec 28, 2017 · 8 comments
Closed

Some OpenSSL configure tests not linking OpenSSL #2199

MarcelRaad opened this issue Dec 28, 2017 · 8 comments

Comments

@MarcelRaad
Copy link
Member

MarcelRaad commented Dec 28, 2017

I did this

./configure --enable-warnings --enable-werror --enable-static --disable-shared [...] --with-ssl="/[...]/openssl/[...]"

OpenSSL's lib directory only contains libcrypto.a and libssl.a.

From config.log (https://github.com/curl/curl/blob/curl-7_57_0/configure.ac#L1638):

configure:22599: checking for HMAC_Update in -lcrypto
configure:22621: gcc -o conftest [...]  -I/[...]/openssl/[...]/include -I/[...]/openssl/[...]/include/openssl  -L/[...]/openssl/[...]/lib conftest.c -lcrypto   >&5
conftest.c:51:1: warning: function declaration isn't a prototype [-Wstrict-prototypes]
char HMAC_Update ();
^
/[...]/openssl/[...]/lib/libcrypto.a(threads_pthread.o): In function `CRYPTO_THREAD_lock_new':
threads_pthread.c:(.text+0x25): undefined reference to `pthread_rwlock_init'
/[...]/openssl/[...]/lib/libcrypto.a(threads_pthread.o): In function `CRYPTO_THREAD_read_lock':
threads_pthread.c:(.text+0x65): undefined reference to `pthread_rwlock_rdlock'
/[...]/openssl/[...]/lib/libcrypto.a(threads_pthread.o): In function `CRYPTO_THREAD_write_lock':
threads_pthread.c:(.text+0x85): undefined reference to `pthread_rwlock_wrlock'
/[...]/openssl/[...]/lib/libcrypto.a(threads_pthread.o): In function `CRYPTO_THREAD_unlock':
threads_pthread.c:(.text+0xa5): undefined reference to `pthread_rwlock_unlock'
/[...]/openssl/[...]/lib/libcrypto.a(threads_pthread.o): In function `CRYPTO_THREAD_lock_free':
threads_pthread.c:(.text+0xca): undefined reference to `pthread_rwlock_destroy'
/[...]/openssl/[...]/lib/libcrypto.a(threads_pthread.o): In function `CRYPTO_THREAD_run_once':
threads_pthread.c:(.text+0xf5): undefined reference to `pthread_once'
/[...]/openssl/[...]/lib/libcrypto.a(threads_pthread.o): In function `CRYPTO_THREAD_init_local':
threads_pthread.c:(.text+0x115): undefined reference to `pthread_key_create'
/[...]/openssl/[...]/lib/libcrypto.a(threads_pthread.o): In function `CRYPTO_THREAD_set_local':
threads_pthread.c:(.text+0x147): undefined reference to `pthread_setspecific'
/[...]/openssl/[...]/lib/libcrypto.a(threads_pthread.o): In function `CRYPTO_THREAD_cleanup_local':
threads_pthread.c:(.text+0x167): undefined reference to `pthread_key_delete'
/[...]/openssl/[...]/lib/libcrypto.a(threads_pthread.o): In function `CRYPTO_THREAD_get_local':
threads_pthread.c:(.text+0x133): undefined reference to `pthread_getspecific'
/[...]/openssl/[...]/lib/libcrypto.a(dso_dlfcn.o): In function `dlfcn_globallookup':
dso_dlfcn.c:(.text+0x11): undefined reference to `dlopen'
dso_dlfcn.c:(.text+0x24): undefined reference to `dlsym'
dso_dlfcn.c:(.text+0x2f): undefined reference to `dlclose'
/[...]/openssl/[...]/lib/libcrypto.a(dso_dlfcn.o): In function `dlfcn_bind_func':
dso_dlfcn.c:(.text+0x1a4): undefined reference to `dlsym'
dso_dlfcn.c:(.text+0x262): undefined reference to `dlerror'
/[...]/openssl/[...]/lib/libcrypto.a(dso_dlfcn.o): In function `dlfcn_load':
dso_dlfcn.c:(.text+0x2c9): undefined reference to `dlopen'
dso_dlfcn.c:(.text+0x339): undefined reference to `dlclose'
dso_dlfcn.c:(.text+0x372): undefined reference to `dlerror'
/[...]/openssl/[...]/lib/libcrypto.a(dso_dlfcn.o): In function `dlfcn_pathbyaddr':
dso_dlfcn.c:(.text+0x421): undefined reference to `dladdr'
dso_dlfcn.c:(.text+0x489): undefined reference to `dlerror'
/[...]/openssl/[...]/lib/libcrypto.a(dso_dlfcn.o): In function `dlfcn_unload':
dso_dlfcn.c:(.text+0x652): undefined reference to `dlclose'
configure:22641: checking for HMAC_Init_ex in -lcrypto
configure:22663: gcc -o conftest [...]  -I/[...]/openssl/[...]/include/openssl -I/[...]/openssl/[...]/include  -L/[...]/openssl/[...]/lib conftest.c -lcrypto   >&5
conftest.c:51:1: warning: function declaration isn't a prototype [-Wstrict-prototypes]
char HMAC_Init_ex ();
^
/[...]/openssl/[...]/lib/libcrypto.a(threads_pthread.o): In function `CRYPTO_THREAD_lock_new':
threads_pthread.c:(.text+0x25): undefined reference to `pthread_rwlock_init'
/[...]/openssl/[...]/lib/libcrypto.a(threads_pthread.o): In function `CRYPTO_THREAD_read_lock':
threads_pthread.c:(.text+0x65): undefined reference to `pthread_rwlock_rdlock'
/[...]/openssl/[...]/lib/libcrypto.a(threads_pthread.o): In function `CRYPTO_THREAD_write_lock':
threads_pthread.c:(.text+0x85): undefined reference to `pthread_rwlock_wrlock'
/[...]/openssl/[...]/lib/libcrypto.a(threads_pthread.o): In function `CRYPTO_THREAD_unlock':
threads_pthread.c:(.text+0xa5): undefined reference to `pthread_rwlock_unlock'
/[...]/openssl/[...]/lib/libcrypto.a(threads_pthread.o): In function `CRYPTO_THREAD_lock_free':
threads_pthread.c:(.text+0xca): undefined reference to `pthread_rwlock_destroy'
/[...]/openssl/[...]/lib/libcrypto.a(threads_pthread.o): In function `CRYPTO_THREAD_run_once':
threads_pthread.c:(.text+0xf5): undefined reference to `pthread_once'
/[...]/openssl/[...]/lib/libcrypto.a(threads_pthread.o): In function `CRYPTO_THREAD_init_local':
threads_pthread.c:(.text+0x115): undefined reference to `pthread_key_create'
/[...]/openssl/[...]/lib/libcrypto.a(threads_pthread.o): In function `CRYPTO_THREAD_set_local':
threads_pthread.c:(.text+0x147): undefined reference to `pthread_setspecific'
/[...]/openssl/[...]/lib/libcrypto.a(threads_pthread.o): In function `CRYPTO_THREAD_cleanup_local':
threads_pthread.c:(.text+0x167): undefined reference to `pthread_key_delete'
/[...]/openssl/[...]/lib/libcrypto.a(threads_pthread.o): In function `CRYPTO_THREAD_get_local':
threads_pthread.c:(.text+0x133): undefined reference to `pthread_getspecific'
/[...]/openssl/[...]/lib/libcrypto.a(dso_dlfcn.o): In function `dlfcn_globallookup':
dso_dlfcn.c:(.text+0x11): undefined reference to `dlopen'
dso_dlfcn.c:(.text+0x24): undefined reference to `dlsym'
dso_dlfcn.c:(.text+0x2f): undefined reference to `dlclose'
/[...]/openssl/[...]/lib/libcrypto.a(dso_dlfcn.o): In function `dlfcn_bind_func':
dso_dlfcn.c:(.text+0x1a4): undefined reference to `dlsym'
dso_dlfcn.c:(.text+0x262): undefined reference to `dlerror'
/[...]/openssl/[...]/lib/libcrypto.a(dso_dlfcn.o): In function `dlfcn_load':
dso_dlfcn.c:(.text+0x2c9): undefined reference to `dlopen'
dso_dlfcn.c:(.text+0x339): undefined reference to `dlclose'
dso_dlfcn.c:(.text+0x372): undefined reference to `dlerror'
/[...]/openssl/[...]/lib/libcrypto.a(dso_dlfcn.o): In function `dlfcn_pathbyaddr':
dso_dlfcn.c:(.text+0x421): undefined reference to `dladdr'
dso_dlfcn.c:(.text+0x489): undefined reference to `dlerror'
/[...]/openssl/[...]/lib/libcrypto.a(dso_dlfcn.o): In function `dlfcn_unload':
dso_dlfcn.c:(.text+0x652): undefined reference to `dlclose'
configure:22681: checking OpenSSL linking with -ldl
configure:22698: gcc -o conftest [...]  -I/[...]/openssl/[...]/include/openssl -I/[...]/openssl/[...]/include  -L/[...]/openssl/[...]/lib conftest.c -ldl  >&5
/tmp/ccxJxgSF.o: In function `main':
conftest.c:(.text.startup+0x5): undefined reference to `ERR_clear_error'
configure:22709: checking OpenSSL linking with -ldl and -lpthread
configure:22726: gcc -o conftest [...]  -I/[...]/openssl/[...]/include/openssl -I/[...]/openssl/[...]/include  -L/[...]/openssl/[...]/lib conftest.c -lpthread -ldl  >&5
/tmp/cco8FOvK.o: In function `main':
conftest.c:(.text.startup+0x5): undefined reference to `ERR_clear_error'

I expected the following

-lcrypto also being passed to the -ldl and -ldl -lpthread tests

curl/libcurl version

7.57.0 (OpenSSL 1.1.0g)

operating system

Ubuntu 16.04 Xenial

@jay
Copy link
Member

jay commented Jan 12, 2018

@MarcelRaad please see if #2234 fixes your issue

@MarcelRaad
Copy link
Member Author

It doesn't fix the main issue here, but it fixes the build for me if I manually delete the lines removing -lcrypto again in the resulting makefile.

@bagder
Copy link
Member

bagder commented Jun 14, 2018

We typically don't bother very much with static builds, especially not without pkg-config data since it is a futile race trying to make that to work for everyone. In the past LIBS="-ldl" ./configure ... has helped to get it going.

That said, when I install the latest openssl git version static-only, my curl configure script detects and links with that just fine:

checking OpenSSL linking with -ldl... no
checking OpenSSL linking with -ldl and -lpthread... yes
checking for SSL_connect in -lssl... yes

@MarcelRaad
Copy link
Member Author

MarcelRaad commented Jun 14, 2018

Static linking without pkg-config works fine with LIBS='-ldl -lpthread' and this is what I'm doing at the moment. However, this check seems to exist for the very reason to make that unnecessary:
c68fed8

My use case is creating a libcurl Conan package referencing an OpenSSL Conan package, so the pkg-config generated by OpenSSL is not really usable, unfortunately.

@bagder
Copy link
Member

bagder commented Jun 14, 2018

What OpenSSL version are you trying this with?

@bagder bagder added the TLS label Jun 14, 2018
@MarcelRaad
Copy link
Member Author

This was originally OpenSSL 1.1.0g and curl 7.57.0. I just retried with OpenSSL 1.1.0h and curl 7.60.0 and the result is the same:

configure: PKG_CONFIG_LIBDIR will be set to "[...]/lib/pkgconfig"
checking for HMAC_Update in -lcrypto... no
checking for HMAC_Init_ex in -lcrypto... no
checking OpenSSL linking with -ldl... no
checking OpenSSL linking with -ldl and -lpthread... no
checking for ssl_version in -laxtls... no
configure: WARNING: SSL disabled, you will not be able to use HTTPS, FTPS, NTLM and more.
configure: WARNING: Use --with-ssl, --with-gnutls, --with-polarssl, --with-cyassl, --with-nss, --with-axtls, --with-winssl, or --with-darwinssl to address this.

bagder added a commit that referenced this issue Jun 14, 2018
Fix the -ldl and -ldl + -lpthread checks for OpenSSL, necessary for
building with static libs without pkg-config.

Reported-by: Marcel Raad
Fixes #2199
@bagder
Copy link
Member

bagder commented Jun 14, 2018

I could reproduce the issue using 1.1.0h and with the fix from #2659 it then subsequently works!

@MarcelRaad
Copy link
Member Author

Great, thank you very much! I can confirm it works for me too.

@bagder bagder closed this as completed in 351dabb Jun 14, 2018
@lock lock bot locked as resolved and limited conversation to collaborators Sep 12, 2018
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Development

No branches or pull requests

3 participants