| Summary: | MySqlStorage.h defines global type MYSQL | ||
|---|---|---|---|
| Product: | [Applications] amarok | Reporter: | Victor Mataré <vmatare+kdebug> |
| Component: | general | Assignee: | Amarok Bugs <amarok-bugs-null> |
| Status: | RESOLVED FIXED | ||
| Severity: | normal | CC: | tuomas |
| Priority: | NOR | ||
| Version First Reported In: | kf5 | ||
| Target Milestone: | kf5 | ||
| Platform: | Other | ||
| OS: | Linux | ||
| Latest Commit: | Version Fixed/Implemented In: | ||
| Sentry Crash Report: | |||
Nice, this was fixed back then at https://invent.kde.org/multimedia/amarok/-/commit/7d8f4bfa8b5d56cd25aa1005c5cb9a192bc19f33 , closing. |
MySqlStorage.h defines a global typedef MYSQL, which breaks recent versions of mysql-connector-c (at least from 8.0 onwards), which defines a struct with the same name: /usr/bin/x86_64-pc-linux-gnu-g++ -DKCOREADDONS_LIB -DKGUIADDONS_LIB -DNO_MYSQL_EMBEDDED -DQT_CONCURRENT_LIB -DQT_CORE_LIB -DQT_DBUS_LIB -DQT_GUI_LIB -DQT_NETWORK_LIB -DQT_NO_DEBUG -DQT_NO_URL _CAST_FROM_STRING -DQT_QMLMODELS_LIB -DQT_QML_LIB -DQT_QUICKWIDGETS_LIB -DQT_QUICK_LIB -DQT_SCRIPTTOOLS_LIB -DQT_SCRIPT_LIB -DQT_SQL_LIB -DQT_SVG_LIB -DQT_USE_FAST_CONCATENATION -DQT_USE_FAST _OPERATOR_PLUS -DQT_WIDGETS_LIB -DQT_XML_LIB -D_GNU_SOURCE -D_LARGEFILE64_SOURCE -Damarok_storage_mysqlserverstorage_EXPORTS -Isrc/core-impl/storage/sql/mysqlserverstorage -I/var/tmp/portage/ media-sound/amarok-9999/work/amarok-9999/src/core-impl/storage/sql/mysqlserverstorage -Isrc/core-impl/storage/sql/mysqlserverstorage/amarok_storage-mysqlserverstorage_autogen/include -I/var/tmp/portage/media-sound/amarok-9999/work/amarok-9999/shared -Ishared -I/var/tmp/portage/media-sound/amarok-9999/work/amarok-9999/src -Isrc -Isrc/core-impl/collections/db/sql -Isrc/core -I/var/tmp/portage/media-sound/amarok-9999/work/amarok-9999/src/core -I/var/tmp/portage/media-sound/amarok-9999/work/amarok-9999/src/core/support -I/var/tmp/portage/media-sound/amarok-9999/work/amarok-9999/src/core/meta -Isrc/context/popupdropper/libpud -I/var/tmp/portage/media-sound/amarok-9999/work/amarok-9999/src/context/popupdropper/libpud -Isrc/context -I/var/tmp/portage/media-sound/amarok-9999/work/amarok-9999/src/context -Isrc/transcoding -I/var/tmp/portage/media-sound/amarok-9999/work/amarok-9999/src/transcoding -I/usr/include/mysql -isystem /usr/include/KF5/KCodecs -isystem /usr/include/KF5 -isystem /usr/include/qt5 -isystem /usr/include/qt5/QtCore -isystem /usr/lib64/qt5/mkspecs/linux-g++ -isystem /usr/include/qt5/QtGui -isystem /usr/include/qt5/QtNetwork -isystem /usr/include/KF5/KIOCore -isystem /usr/include/KF5/KCoreAddons -isystem /usr/include/KF5/KService -isystem /usr/include/KF5/KConfigCore -isystem /usr/include/qt5/QtConcurrent -isystem /usr/include/qt5/QtDBus -isystem /usr/include/KF5/ThreadWeaver -isystem /usr/include/KF5/KI18n -isystem /usr/include/KF5/KXmlGui -isystem /usr/include/qt5/QtXml -isystem /usr/include/qt5/QtWidgets -isystem /usr/include/KF5/KConfigWidgets -isystem /usr/include/KF5/KWidgetsAddons -isystem /usr/include/KF5/KConfigGui -isystem /usr/include/KF5/KAuth -isystem /usr/include/phonon4qt5 -isystem /usr/include/KF5/KArchive -isystem /usr/include/KF5/Attica -isystem /usr/include/KF5/KDeclarative -isystem /usr/include/qt5/QtQml -isystem /usr/include/KF5/KPackage -isystem /usr/include/KF5/KGlobalAccel -isystem /usr/include/KF5/KGuiAddons -isystem /usr/include/KF5/KIconThemes -isystem /usr/include/KF5/KCMUtils -isystem /usr/include/KF5/KIOFileWidgets -isystem /usr/include/KF5/KIOWidgets -isystem /usr/include/KF5/KJobWidgets -isystem /usr/include/KF5/KCompletion -isystem /usr/include/KF5/KBookmarks -isystem /usr/include/KF5/KItemViews -isystem /usr/include/KF5/Solid -isystem /usr/include/KF5/KNewStuff3 -isystem /usr/include/KF5/KNewStuff3/KNS3 -isystem /usr/include/KF5/KNewStuff3/knscore -isystem /usr/include/KF5/KNewStuff3/kns3 -isystem /usr/include/KF5/KNewStuff3/KNSCore -isystem /usr/include/KF5/KNotifications -isystem /usr/include/KF5/KNotifyConfig -isystem /usr/include/KF5/KTextEditor -isystem /usr/include/KF5/KParts -isystem /usr/include/KF5/KTextWidgets -isystem /usr/include/KF5/SonnetUi -isystem /usr/include/KF5/KWindowSystem -isystem /usr/include/qt5/QtQuick -isystem /usr/include/qt5/QtQmlModels -isystem /usr/include/qt5/QtQuickWidgets -isystem /usr/include/qt5/QtScript -isystem /usr/include/qt5/QtScriptTools -isystem /usr/include/qt5/QtSql -isystem /usr/include/qt5/QtSvg -DQT_NO_DEBUG -DNDEBUG -O2 -pipe -frecord-gcc-switches -fno-operator-names -fno-exceptions -Wall -Wextra -Wcast-align -Wchar-subscripts -Wformat-security -Wno-long-long -Wpointer-arith -Wundef -Wnon-virtual-dtor -Woverloaded-virtual -Werror=return-type -Wvla -Wdate-time -Wsuggest-override -Wlogical-op -fdiagnostics-color=always -fmessage-length=0 -Wl,--as-needed -std=c++11 -fPIC -fvisibility=hidden -fvisibility-inlines-hidden -fPIC -std=gnu++11 -MD -MT src/core-impl/storage/sql/mysqlserverstorage/CMakeFiles/amarok_storage-mysqlserverstorage.dir/__/mysql-shared/MySqlStorage.cpp.o -MF src/core-impl/storage/sql/mysqlserverstorage/CMakeFiles/amarok_storage-mysqlserverstorage.dir/__/mysql-shared/MySqlStorage.cpp.o.d -o src/core-impl/storage/sql/mysqlserverstorage/CMakeFiles/amarok_storage-mysqlserverstorage.dir/__/mysql-shared/MySqlStorage.cpp.o -c /var/tmp/portage/media-sound/amarok-9999/work/amarok-9999/src/core-impl/storage/sql/mysql-shared/MySqlStorage.cpp In file included from /usr/include/mysql/mysql.h:83, from /var/tmp/portage/media-sound/amarok-9999/work/amarok-9999/src/core-impl/storage/sql/mysql-shared/MySqlStorage.cpp:31: /usr/include/mysql/mysql/client_plugin.h:108:8: error: using typedef-name ‘MYSQL’ after ‘struct’ 108 | struct MYSQL; | ^~~~~ In file included from /var/tmp/portage/media-sound/amarok-9999/work/amarok-9999/src/core-impl/storage/sql/mysql-shared/MySqlStorage.cpp:20: /var/tmp/portage/media-sound/amarok-9999/work/amarok-9999/src/core-impl/storage/sql/mysql-shared/MySqlStorage.h:32:25: note: ‘MYSQL’ has a previous declaration here 32 | typedef struct st_mysql MYSQL; | ^~~~~ This is why it's common practice for C++ applications to put everything in their own namespace. That would definitely be the correct way to fix this and any future name clashes.