Details
-
Bug
-
Status: Closed (View Workflow)
-
Major
-
Resolution: Not a Bug
-
3.0.2
-
None
-
None
-
macOS 10.12.6
Description
Building against OpenSSL 0.9.8zh, I get the following error:
Scanning dependencies of target mariadb_obj
|
[ 1%] Building C object libmariadb/CMakeFiles/mariadb_obj.dir/secure/openssl.c.o
|
/tmp/mariadb-connector-c-3.0.2-src/libmariadb/secure/openssl.c:247:5: warning:
|
implicit declaration of function 'CRYPTO_THREADID_set_callback' is invalid in C99
|
[-Wimplicit-function-declaration]
|
CRYPTO_THREADID_set_callback(my_cb_threadid);
|
^
|
1 warning generated.
|
[ 42%] Built target mariadb_obj
|
[ 43%] Linking C static library libmariadbclient.a
|
[ 43%] Built target mariadbclient
|
[ 44%] Linking C shared library libmariadb.dylib
|
Undefined symbols for architecture x86_64:
|
"_CRYPTO_THREADID_set_callback", referenced from:
|
_ma_tls_start in openssl.c.o
|
ld: symbol(s) not found for architecture x86_64
|
clang: error: linker command failed with exit code 1 (use -v to see invocation)
|
make[2]: *** [libmariadb/libmariadb.3.dylib] Error 1
|
make[1]: *** [libmariadb/CMakeFiles/libmariadb.dir/all] Error 2
|
make: *** [all] Error 2
|
From the man page:
CRYPTO_THREADID and associated functions were introduced in OpenSSL 1.0.0 to replace (actually, deprecate) the previous CRYPTO_set_id_callback(), CRYPTO_get_id_callback(), and CRYPTO_thread_id() functions which assumed thread IDs to always be represented by 'unsigned long'.
The following patch fixes things:
--- openssl.c 2017-07-26 15:27:59.000000000 -0400
|
+++ openssl.c.fixed 2017-07-26 15:27:27.000000000 -0400
|
@@ -244,7 +244,11 @@
|
pthread_mutex_init(&LOCK_crypto[i], NULL);
|
}
|
CRYPTO_set_locking_callback(my_cb_locking);
|
+#if OPENSSL_VERSION_NUMBER < 0x10000000L
|
+ CRYPTO_set_id_callback(my_cb_threadid);
|
+#else
|
CRYPTO_THREADID_set_callback(my_cb_threadid);
|
+#endif
|
}
|
return 0;
|
}
|