10.3 branch from https://github.com/MariaDB/server cmake -DWITHOUT_MROONGA_STORAGE_ENGINE=1 -DWITHOUT_ROCKSDB_STORAGE_ENGINE=1 -DWITHOUT_TOKUDB_STORAGE_ENGINE=1 -DCMAKE_EXE_LINKER_FLAGS=-fuse-ld=lld -DCMAKE_SHARED_LINKER_FLAGS=-fuse-ld=lld -DCMAKE_BUILD_TYPE=Debug -DCMAKE_C_COMPILER=clang -DCMAKE_CXX_COMPILER=clang++ ../mariadb -DWITHOUT_*_STORAGE_ENGINE=1 just for a build speed up. [ 59%] Linking C shared library libmariadb.so cd /home/kevg/work/tmp/libmariadb/libmariadb && /usr/bin/cmake -E cmake_link_script CMakeFiles/libmariadb.dir/link.txt --verbose=1 /home/kevg/bin/clang -fPIC -fdiagnostics-color -Wl,-z,relro,-z,now -fstack-protector --param=ssp-buffer-size=4 -fPIC -g -DENABLED_DEBUG_SYNC -ggdb3 -DSAFE_MUTEX -DSAFEMALLOC -Wall -Wdeclaration-after-statement -Wextra -Wformat-security -Wno-init-self -Wno-null-conversion -Wno-unused-parameter -Wno-unused-private-field -Woverloaded-virtual -Wnon-virtual-dtor -Wvla -Wwrite-strings -fuse-ld=lld -shared -Wl,-soname,libmariadb.so.3 -o libmariadb.so.3 CMakeFiles/mariadb_obj.dir/__/plugins/pvio/pvio_socket.c.o CMakeFiles/mariadb_obj.dir/__/plugins/auth/my_auth.c.o CMakeFiles/mariadb_obj.dir/__/plugins/auth/old_password.c.o CMakeFiles/mariadb_obj.dir/ma_array.c.o CMakeFiles/mariadb_obj.dir/ma_charset.c.o CMakeFiles/mariadb_obj.dir/ma_hash.c.o CMakeFiles/mariadb_obj.dir/ma_net.c.o CMakeFiles/mariadb_obj.dir/mariadb_charset.c.o CMakeFiles/mariadb_obj.dir/ma_time.c.o CMakeFiles/mariadb_obj.dir/ma_default.c.o CMakeFiles/mariadb_obj.dir/ma_errmsg.c.o CMakeFiles/mariadb_obj.dir/mariadb_lib.c.o CMakeFiles/mariadb_obj.dir/ma_list.c.o CMakeFiles/mariadb_obj.dir/ma_pvio.c.o CMakeFiles/mariadb_obj.dir/ma_tls.c.o CMakeFiles/mariadb_obj.dir/ma_alloc.c.o CMakeFiles/mariadb_obj.dir/ma_compress.c.o CMakeFiles/mariadb_obj.dir/ma_init.c.o CMakeFiles/mariadb_obj.dir/ma_password.c.o CMakeFiles/mariadb_obj.dir/ma_ll2str.c.o CMakeFiles/mariadb_obj.dir/ma_sha1.c.o CMakeFiles/mariadb_obj.dir/mariadb_stmt.c.o CMakeFiles/mariadb_obj.dir/ma_loaddata.c.o CMakeFiles/mariadb_obj.dir/ma_stmt_codec.c.o CMakeFiles/mariadb_obj.dir/ma_string.c.o CMakeFiles/mariadb_obj.dir/ma_dtoa.c.o CMakeFiles/mariadb_obj.dir/ma_client_plugin.c.o CMakeFiles/mariadb_obj.dir/ma_io.c.o CMakeFiles/mariadb_obj.dir/secure/openssl.c.o CMakeFiles/mariadb_obj.dir/mariadb_dyncol.c.o CMakeFiles/mariadb_obj.dir/mariadb_async.c.o CMakeFiles/mariadb_obj.dir/ma_context.c.o -lpthread -lz -ldl -lm -lpthread -lpthread -ldl -lm -lssl -lcrypto -Wl,--no-undefined mariadbclient.def /home/kevg/bin/ld.lld: error: duplicate symbol 'mysql_get_timeout_value' in version script /home/kevg/bin/ld.lld: error: duplicate symbol 'mysql_get_timeout_value_ms' in version script /home/kevg/bin/ld.lld: error: <internal>: symbol "mysql_affected_rows@libmariadbclient_18" has undefined version libmariadbclient_18" /home/kevg/bin/ld.lld: error: <internal>: symbol "mysql_autocommit@libmariadbclient_18" has undefined version libmariadbclient_18" /home/kevg/bin/ld.lld: error: <internal>: symbol "mysql_change_user@libmariadbclient_18" has undefined version libmariadbclient_18" /home/kevg/bin/ld.lld: error: <internal>: symbol "mysql_character_set_name@libmariadbclient_18" has undefined version libmariadbclient_18" /home/kevg/bin/ld.lld: error: <internal>: symbol "mysql_client_find_plugin@libmariadbclient_18" has undefined version libmariadbclient_18" /home/kevg/bin/ld.lld: error: <internal>: symbol "mysql_client_register_plugin@libmariadbclient_18" has undefined version libmariadbclient_18" /home/kevg/bin/ld.lld: error: <internal>: symbol "mysql_close@libmariadbclient_18" has undefined version libmariadbclient_18" /home/kevg/bin/ld.lld: error: <internal>: symbol "mysql_commit@libmariadbclient_18" has undefined version libmariadbclient_18" /home/kevg/bin/ld.lld: error: <internal>: symbol "mysql_data_seek@libmariadbclient_18" has undefined version libmariadbclient_18" /home/kevg/bin/ld.lld: error: <internal>: symbol "mysql_debug@libmariadbclient_18" has undefined version libmariadbclient_18" /home/kevg/bin/ld.lld: error: <internal>: symbol "mysql_dump_debug_info@libmariadbclient_18" has undefined version libmariadbclient_18" /home/kevg/bin/ld.lld: error: <internal>: symbol "mysql_embedded@libmariadbclient_18" has undefined version libmariadbclient_18" /home/kevg/bin/ld.lld: error: <internal>: symbol "mysql_eof@libmariadbclient_18" has undefined version libmariadbclient_18" /home/kevg/bin/ld.lld: error: <internal>: symbol "mysql_errno@libmariadbclient_18" has undefined version libmariadbclient_18" /home/kevg/bin/ld.lld: error: <internal>: symbol "mysql_error@libmariadbclient_18" has undefined version libmariadbclient_18" /home/kevg/bin/ld.lld: error: <internal>: symbol "mysql_escape_string@libmariadbclient_18" has undefined version libmariadbclient_18" /home/kevg/bin/ld.lld: error: <internal>: symbol "mysql_fetch_field@libmariadbclient_18" has undefined version libmariadbclient_18" /home/kevg/bin/ld.lld: error: <internal>: symbol "mysql_fetch_field_direct@libmariadbclient_18" has undefined version libmariadbclient_18" /home/kevg/bin/ld.lld: error: too many errors emitted, stopping now (use -error-limit=0 to see all errors) clang-6.0: error: linker command failed with exit code 1 (use -v to see invocation) Build works with ld. Gold complains on incorrect VERSION usage. I don't know what's correct behaviour but I suspect <internal> is not something user supposed to see. This looks like a bit useful information https://github.com/MariaDB/server/commit/f91561bf54f5e2f1f97f3fddcb866898730ae343
$ ld.lld --version LLD 7.0.0 (https://llvm.org/git/lld.git 73e702cea18c1794328ecb1a3126db223e070fe2) (compatible with GNU linkers)
I guess we could avoid printing "<internal>" once and forever with something like https://reviews.llvm.org/D45375.
I can still get the following messages linking libmariadb.so but no other issues error: duplicate symbol 'mysql_get_timeout_value' in version script error: duplicate symbol 'mysql_get_timeout_value_ms' in version script
Yes, no internal errors on a recent lld. But difference between GNU ld and lld remains. Note that lld.llvm.org says that lld is a drop-in replacement for GNU linkers. This is not true. One of GNU ld and lld has a bug.
I think this is likely a bug of the version script. It assigns multiple versions to a symbol, thus the lld error, though ld.bfd just ignores it. https://reviews.llvm.org/D64549 relaxed the errors to warnings. gold should issue warnings as well. gold is also a drop-in replacement of ld.bfd, but that doesn't mean gold/lld necessarily copy every corner case of ld.bfd. We should be careful on behavior differences, but I think on this particular one warning/error is a more sensible action.