Public bug reported:
C and C++ differ in the form of types being defined. While C++ structs are defined also as new types, in C you have to explicitly typedef the struct to have a new type. From clickhouse source code, we are getting: https://launchpadlibrarian.net/429654087/buildlog_ubuntu-eoan- amd64.clickhouse_18.16.1+ds-4build1_BUILDING.txt.gz ---- [ 6%] Building CXX object libs/libmysqlxx/CMakeFiles/mysqlxx.dir/src/Connection.cpp.o cd /<<BUILDDIR>>/clickhouse-18.16.1+ds/obj-x86_64-linux-gnu/libs/libmysqlxx && /usr/bin/c++ -I/<<BUILDDIR>>/clickhouse-18.16.1+ds/libs/libmysqlxx/include -I/<<BUILDDIR>>/clickhouse-18.16.1+ds/libs/libcommon/include -I/<<BUILDDIR>>/clickhouse-18.16.1+ds/obj-x86_64-linux-gnu/libs/libcommon/include -I/<<BUILDDIR>>/clickhouse-18.16.1+ds/contrib/cityhash102/include -g -O2 -fdebug-prefix-map=/<<BUILDDIR>>/clickhouse-18.16.1+ds=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -pipe -fno-omit-frame-pointer -Wall -Wnon-virtual-dtor -O2 -g -DNDEBUG -O3 -flto -fno-fat-lto-objects -fPIC -std=c++17 -o CMakeFiles/mysqlxx.dir/src/Connection.cpp.o -c /<<BUILDDIR>>/clickhouse-18.16.1+ds/libs/libmysqlxx/src/Connection.cpp In file included from /<<BUILDDIR>>/clickhouse-18.16.1+ds/libs/libmysqlxx/include/mysqlxx/ResultBase.h:4, from /<<BUILDDIR>>/clickhouse-18.16.1+ds/libs/libmysqlxx/include/mysqlxx/UseQueryResult.h:3, from /<<BUILDDIR>>/clickhouse-18.16.1+ds/libs/libmysqlxx/include/mysqlxx/Query.h:6, from /<<BUILDDIR>>/clickhouse-18.16.1+ds/libs/libmysqlxx/include/mysqlxx/Connection.h:10, from /<<BUILDDIR>>/clickhouse-18.16.1+ds/libs/libmysqlxx/src/Connection.cpp:7: /<<BUILDDIR>>/clickhouse-18.16.1+ds/libs/libmysqlxx/include/mysqlxx/Types.h:7:23: error: conflicting declaration ‘using MYSQL = struct st_mysql’ using MYSQL = st_mysql; ^ In file included from /<<BUILDDIR>>/clickhouse-18.16.1+ds/libs/libmysqlxx/src/Connection.cpp:4: /usr/include/mysql/mysql.h:335:3: note: previous declaration as ‘typedef struct MYSQL MYSQL’ } MYSQL; ---- If I edit file libs/libmysqlxx/include/mysqlxx/Types.h and comment the following lines: //struct st_mysql; //using MYSQL = st_mysql; // //struct st_mysql_res; //using MYSQL_RES = st_mysql_res; // //using MYSQL_ROW = char**; // //struct st_mysql_field; //using MYSQL_FIELD = st_mysql_field; and add #include <mysql/mysql.h> I solve the issue, as MYSQL, MYSQL_RES, MYSQL_ROW and MYSQL_FIELD types are defined by the mysql.h header file (as C++ would expect). ---- Unfortunately doing that with gcc-9 was not successful not because of the change, per se, but gcc-9 crashed during clickhouse compilation. When changing gcc-9 to gcc-8 as the default compiler (Ubuntu Eoan userland) I was able to compile clickhouse libmysqlxx library successfully. ** Affects: clickhouse (Ubuntu) Importance: Medium Assignee: Rafael David Tinoco (rafaeldtinoco) Status: In Progress ** Changed in: clickhouse (Ubuntu) Status: New => In Progress ** Changed in: clickhouse (Ubuntu) Importance: Undecided => Medium ** Changed in: clickhouse (Ubuntu) Assignee: (unassigned) => Rafael David Tinoco (rafaeldtinoco) -- You received this bug notification because you are a member of Ubuntu Bugs, which is subscribed to Ubuntu. https://bugs.launchpad.net/bugs/1840511 Title: Eoan FTBFS with gcc-9 and MySQL 8 To manage notifications about this bug go to: https://bugs.launchpad.net/ubuntu/+source/clickhouse/+bug/1840511/+subscriptions -- ubuntu-bugs mailing list ubuntu-bugs@lists.ubuntu.com https://lists.ubuntu.com/mailman/listinfo/ubuntu-bugs