[MDEV-17010] Multiple definition issue on FreeBSD after 10.3.9 update Created: 2018-08-17  Updated: 2018-09-21  Resolved: 2018-09-21

Status: Closed
Project: MariaDB Server
Component/s: Compiling
Affects Version/s: 10.3.9
Fix Version/s: 10.3.10

Type: Bug Priority: Blocker
Reporter: Bernard Spil Assignee: Sergei Golubchik
Resolution: Fixed Votes: 0
Labels: regression
Environment:

FreeBSD 11.2 GENERIC
FreeBSD clang version 6.0.0 (tags/RELEASE_600/final 326565) (based on LLVM 6.0.0)
CMake 3.12.0



 Description   

After fixing the relocation issue in 17009 by adding -fPIC to CMAKE_C_FLAGS_RELEASE, I get a link error in plugin/server_audit.
Inspecting the libmysys.a I don't see a duplicate file_logger.c.o in the archive, inspecting file_logger.c.o with readelf -a does not reveal duplicate definitions either.

[ 84%] Linking CXX shared module server_audit.so
cd /usr/ports/databases/mariadb103-server/work/mariadb-10.3.9/plugin/server_audit && /usr/local/bin/cmake -E cmake_link_script CMakeFiles
/server_audit.dir/link.txt --verbose=1
/usr/bin/c++ -fPIC -O2 -pipe -fPIC -fstack-protector -isystem /usr/local/include -fno-strict-aliasing  -isystem /usr/local/include -Wl,-z
,relro,-z,now -fstack-protector --param=ssp-buffer-size=4 -fno-rtti -O2 -pipe -fPIC -fstack-protector -isystem /usr/local/include -fno-st
rict-aliasing  -isystem /usr/local/include -D_FORTIFY_SOURCE=2 -DDBUG_OFF   -fstack-protector -shared  -o server_audit.so CMakeFiles/serv
er_audit.dir/server_audit.c.o CMakeFiles/server_audit.dir/test_audit_v4.c.o -pthread ../../libservices/libmysqlservices.a ../../sql/libsq
l.a ../../storage/csv/libcsv.a ../../storage/heap/libheap.a ../../storage/innobase/libinnobase.a -llzma -lbz2 ../../storage/maria/libaria
.a ../../storage/myisam/libmyisam.a ../../storage/myisammrg/libmyisammrg.a ../../storage/perfschema/libperfschema.a ../../storage/sequenc
e/libsequence.a ../feedback/libfeedback.a ../user_variables/libuser_variables.a ../userstat/libuserstat.a ../../sql/libpartition.a ../../
sql/libsql_sequence.a ../../mysys/libmysys.a ../../mysys_ssl/libmysys_ssl.a ../../dbug/libdbug.a ../../mysys/libmysys.a ../../mysys_ssl/l
ibmysys_ssl.a ../../dbug/libdbug.a -lz -lm -lexecinfo ../../strings/libstrings.a ../../vio/libvio.a ../../pcre/libpcre.a -lwrap -lcrypt -
lssl -lcrypto ../../wsrep/libwsrep.a -pthread                                                                                            ../../mysys/libmysys.a(file_logger.c.o): In function `logger_init_mutexes':
file_logger.c:(.text+0x7f0): multiple definition of `logger_init_mutexes'
CMakeFiles/server_audit.dir/server_audit.c.o:server_audit.c:(.text+0x630): first defined here
../../mysys/libmysys.a(file_logger.c.o): In function `logger_printf':
file_logger.c:(.text+0x760): multiple definition of `logger_printf'
CMakeFiles/server_audit.dir/server_audit.c.o:server_audit.c:(.text+0x5a0): first defined here
../../mysys/libmysys.a(file_logger.c.o): In function `logger_vprintf':
file_logger.c:(.text+0x1f0): multiple definition of `logger_vprintf'
CMakeFiles/server_audit.dir/server_audit.c.o:server_audit.c:(.text+0x1c0): first defined here
c++: error: linker command failed with exit code 1 (use -v to see invocation)
*** Error code 1



 Comments   
Comment by Rainer Orth [ 2018-09-11 ]

I'm seeing exactly the same issue on Solaris 11.4/x86 with the bundled gcc/g++ 7.3.0.

Looking at the preprocessed output of server_audit.c (with -g3 -save-temps),
I see this section

void logger_init_mutexes()
{

}

  1. 238 "/vol/src/mariadb/mariadb-10.3.9/plugin/server_audit/server_audit.c" 2
    #define HAVE_PSI_INTERFACE

i.e. another definition of logger_init_mutexes beside the `canonical' one
in file_logger.c.

Generated at Thu Feb 08 08:33:14 UTC 2024 using Jira 8.20.16#820016-sha1:9d11dbea5f4be3d4cc21f03a88dd11d8c8687422.