I completed the build of the project and compiled the tinyorm library. When running a test sample, the compilation reports an error. This seems to be related to the qt5 library, perhaps this requires a qmake build. I don't know much about QT applications and I'm not sure which libraries to import.
I have built the Qt5 library on ubuntu, but there is no .cmake file. So I chose to import the qt libraries manually. I have seen some people say that qt dependencies need to be built with qmake, I didn't understand those and I used the following way build.
#include <orm/db.hpp>
using Orm::DB;
// Ownership of a shared_ptr()
auto manager = DB::create({
{"driver", "QMYSQL"},
{"host", qEnvironmentVariable("DB_HOST", "127.0.0.1")},
{"port", qEnvironmentVariable("DB_PORT", "3306")},
{"database", qEnvironmentVariable("DB_DATABASE", "")},
{"username", qEnvironmentVariable("DB_USERNAME", "root")},
{"password", qEnvironmentVariable("DB_PASSWORD", "")},
{"charset", qEnvironmentVariable("DB_CHARSET", "utf8mb4")},
{"collation", qEnvironmentVariable("DB_COLLATION", "utf8mb4_0900_ai_ci")},
{"timezone", "+00:00"},
// Specifies what time zone all QDateTime-s will have
{"qt_timezone", QVariant::fromValue(Qt::UTC)},
{"prefix", ""},
{"prefix_indexes", false},
{"strict", true},
{"engine", "InnoDB"},
{"options", QVariantHash()},
});
int main(){
return 0;
}
# app is cpp filename above
CC = /usr/bin/gcc-11
CXX = /usr/bin/g++-11
Iinclude = -I/home/wcx/gitProject/cpp_interview/TinyORM/include
Iinclude += -I/home/wcx/gitProject/cpp_interview/TinyORM/dep/range-v3/include
Iinclude += -I/home/wcx/gitProject/cpp_interview/TinyORM/dep/tabulate/include
Iinclude += -I/home/wcx/gitProject/cpp_interview/TinyORM/dep/qt5/qt-everywhere-src-5.15.2/qtbase/include
Iinclude += -I/home/wcx/gitProject/cpp_interview/TinyORM/dep/qt5/qt-everywhere-src-5.15.2/qtbase/include/QtCore
Iinclude += -I/home/wcx/gitProject/cpp_interview/TinyORM/dep/qt5/qt-everywhere-src-5.15.2/qtbase/include/QtSql
INCPATH = -I. -I. -I../TinyORM/dep/qt5/qt-everywhere-src-5.15.2/qtbase/include -I/home/wcx/gitProject/cpp_interview/TinyORM/dep/qt5/qt-everywhere-src-5.15.2/qtbase/include -I../TinyORM/dep/qt5/qt-everywhere-src-5.15.2/qtbase/include/QtGui -I/home/wcx/gitProject/cpp_interview/TinyORM/dep/qt5/qt-everywhere-src-5.15.2/qtbase/include/QtGui -I../TinyORM/dep/qt5/qt-everywhere-src-5.15.2/qtbase/include/QtCore -I/home/wcx/gitProject/cpp_interview/TinyORM/dep/qt5/qt-everywhere-src-5.15.2/qtbase/include/QtCore -I. -I/usr/include/libdrm -I/home/wcx/gitProject/cpp_interview/TinyORM/dep/qt5/qt-everywhere-src-5.15.2/qtbase/mkspecs/linux-g++
Iinclude += $(INCPATH)
Llib = -L/home/wcx/gitProject/cpp_interview/TinyORM/build
Llib += -L/home/wcx/gitProject/cpp_interview/TinyORM/dep/qt5/qt-everywhere-src-5.15.2/qtbase/lib
libs = /home/wcx/gitProject/cpp_interview/TinyORM/dep/qt5/qt-everywhere-src-5.15.2/qtbase/lib/libQt5Gui.so /home/wcx/gitProject/cpp_interview/TinyORM/dep/qt5/qt-everywhere-src-5.15.2/qtbase/lib/libQt5Core.so -lGL -lpthread
libs += -lTinyOrm -lQt5Sql -lQt5Core
CFLAGS = -Werror -fPIC -Wall -Wextra -pedantic -std=c++20 -O0 $(libs) $(Iinclude) $(Llib)
all: $(app)
$(app): $(app).cpp
$(CXX) $(CFLAGS) -o $(app) $(app).cpp
/usr/bin/g++-11 -Werror -fPIC -Wall -Wextra -pedantic -std=c++20 -O0 /home/wcx/gitProject/cpp_interview/TinyORM/dep/qt5/qt-everywhere-src-5.15.2/qtbase/lib/libQt5Gui.so /home/wcx/gitProject/cpp_interview/TinyORM/dep/qt5/qt-everywhere-src-5.15.2/qtbase/lib/libQt5Core.so -lGL -lpthread -lTinyOrm -lQt5Sql -lQt5Core -I/home/wcx/gitProject/cpp_interview/TinyORM/include -I/home/wcx/gitProject/cpp_interview/TinyORM/dep/range-v3/include -I/home/wcx/gitProject/cpp_interview/TinyORM/dep/tabulate/include -I/home/wcx/gitProject/cpp_interview/TinyORM/dep/qt5/qt-everywhere-src-5.15.2/qtbase/include -I/home/wcx/gitProject/cpp_interview/TinyORM/dep/qt5/qt-everywhere-src-5.15.2/qtbase/include/QtCore -I/home/wcx/gitProject/cpp_interview/TinyORM/dep/qt5/qt-everywhere-src-5.15.2/qtbase/include/QtSql -I. -I. -I../TinyORM/dep/qt5/qt-everywhere-src-5.15.2/qtbase/include -I/home/wcx/gitProject/cpp_interview/TinyORM/dep/qt5/qt-everywhere-src-5.15.2/qtbase/include -I../TinyORM/dep/qt5/qt-everywhere-src-5.15.2/qtbase/include/QtGui -I/home/wcx/gitProject/cpp_interview/TinyORM/dep/qt5/qt-everywhere-src-5.15.2/qtbase/include/QtGui -I../TinyORM/dep/qt5/qt-everywhere-src-5.15.2/qtbase/include/QtCore -I/home/wcx/gitProject/cpp_interview/TinyORM/dep/qt5/qt-everywhere-src-5.15.2/qtbase/include/QtCore -I. -I/usr/include/libdrm -I/home/wcx/gitProject/cpp_interview/TinyORM/dep/qt5/qt-everywhere-src-5.15.2/qtbase/mkspecs/linux-g++ -L/home/wcx/gitProject/cpp_interview/TinyORM/build -L/home/wcx/gitProject/cpp_interview/TinyORM/dep/qt5/qt-everywhere-src-5.15.2/qtbase/lib -o connect connect.cpp
/usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu/Scrt1.o: In function `_start':
(.text+0x20): undefined reference to `main'
/tmp/cciGGVit.o: In function `__static_initialization_and_destruction_0(int, int)':
connect.cpp:(.text+0x301f): undefined reference to `qEnvironmentVariable(char const*, QString const&)'
connect.cpp:(.text+0x307f): undefined reference to `qEnvironmentVariable(char const*, QString const&)'
connect.cpp:(.text+0x30df): undefined reference to `qEnvironmentVariable(char const*, QString const&)'
connect.cpp:(.text+0x313f): undefined reference to `qEnvironmentVariable(char const*, QString const&)'
connect.cpp:(.text+0x319f): undefined reference to `qEnvironmentVariable(char const*, QString const&)'
/tmp/cciGGVit.o:connect.cpp:(.text+0x31ff): more undefined references to `qEnvironmentVariable(char const*, QString const&)' follow
/tmp/cciGGVit.o: In function `__static_initialization_and_destruction_0(int, int)':
connect.cpp:(.text+0x3430): undefined reference to `Orm::DB::create(QHash<QString, QVariant> const&, QString const&)'
connect.cpp:(.text+0x3485): undefined reference to `QVariant::~QVariant()'
connect.cpp:(.text+0x35ec): undefined reference to `QVariant::~QVariant()'
/tmp/cciGGVit.o:(.qtversion[qt_version_tag]+0x0): undefined reference to `qt_version_tag'
/tmp/cciGGVit.o: In function `QArrayData::data()':
connect.cpp:(.text._ZN10QArrayData4dataEv[_ZN10QArrayData4dataEv]+0x4c): undefined reference to `qt_assert(char const*, char const*, int)'
/tmp/cciGGVit.o: In function `QArrayData::sharedNull()':
connect.cpp:(.text._ZN10QArrayData10sharedNullEv[_ZN10QArrayData10sharedNullEv]+0x7): undefined reference to `QArrayData::shared_null'
/tmp/cciGGVit.o: In function `QString::QString(char const*)':
connect.cpp:(.text._ZN7QStringC2EPKc[_ZN7QStringC5EPKc]+0x36): undefined reference to `QString::fromAscii_helper(char const*, int)'
/tmp/cciGGVit.o: In function `QString::QString(QLatin1String)':
connect.cpp:(.text._ZN7QStringC2E13QLatin1String[_ZN7QStringC5E13QLatin1String]+0x41): undefined reference to `QString::fromLatin1_helper(char const*, int)'
/tmp/cciGGVit.o: In function `QString::QString(QString const&)':
connect.cpp:(.text._ZN7QStringC2ERKS_[_ZN7QStringC5ERKS_]+0x42): undefined reference to `qt_assert(char const*, char const*, int)'
/tmp/cciGGVit.o: In function `QHashData::willGrow()':
connect.cpp:(.text._ZN9QHashData8willGrowEv[_ZN9QHashData8willGrowEv]+0x34): undefined reference to `QHashData::rehash(int)'
/tmp/cciGGVit.o: In function `qt_getQtMetaObject()':
connect.cpp:(.text._Z18qt_getQtMetaObjectv[_Z18qt_getQtMetaObjectv]+0x7): undefined reference to `QObject::staticQtMetaObject'
/tmp/cciGGVit.o: In function `std::pair<QString, QVariant>::~pair()':
connect.cpp:(.text._ZNSt4pairI7QString8QVariantED2Ev[_ZNSt4pairI7QString8QVariantED5Ev]+0x18): undefined reference to `QVariant::~QVariant()'
/tmp/cciGGVit.o: In function `std::pair<QString, QVariant>::pair<char const (&) [7], char const (&) [7], true>(char const (&) [7], char const (&) [7])':
connect.cpp:(.text._ZNSt4pairI7QString8QVariantEC1IRA7_KcS6_Lb1EEEOT_OT0_[_ZNSt4pairI7QString8QVariantEC1IRA7_KcS6_Lb1EEEOT_OT0_]+0x4b): undefined reference to `QVariant::QVariant(char const*)'
/tmp/cciGGVit.o: In function `std::pair<QString, QVariant>::pair<char const (&) [9], char const (&) [7], true>(char const (&) [9], char const (&) [7])':
connect.cpp:(.text._ZNSt4pairI7QString8QVariantEC1IRA9_KcRA7_S4_Lb1EEEOT_OT0_[_ZNSt4pairI7QString8QVariantEC1IRA9_KcRA7_S4_Lb1EEEOT_OT0_]+0x4b): undefined reference to `QVariant::QVariant(char const*)'
/tmp/cciGGVit.o: In function `std::pair<QString, QVariant>::pair<char const (&) [7], char const (&) [1], true>(char const (&) [7], char const (&) [1])':
connect.cpp:(.text._ZNSt4pairI7QString8QVariantEC1IRA7_KcRA1_S4_Lb1EEEOT_OT0_[_ZNSt4pairI7QString8QVariantEC1IRA7_KcRA1_S4_Lb1EEEOT_OT0_]+0x4b): undefined reference to `QVariant::QVariant(char const*)'
/tmp/cciGGVit.o: In function `std::pair<QString, QVariant>::pair<char const (&) [15], bool, true>(char const (&) [15], bool&&)':
connect.cpp:(.text._ZNSt4pairI7QString8QVariantEC1IRA15_KcbLb1EEEOT_OT0_[_ZNSt4pairI7QString8QVariantEC1IRA15_KcbLb1EEEOT_OT0_]+0x50): undefined reference to `QVariant::QVariant(bool)'
/tmp/cciGGVit.o: In function `std::pair<QString, QVariant>::pair<char const (&) [7], bool, true>(char const (&) [7], bool&&)':
connect.cpp:(.text._ZNSt4pairI7QString8QVariantEC1IRA7_KcbLb1EEEOT_OT0_[_ZNSt4pairI7QString8QVariantEC1IRA7_KcbLb1EEEOT_OT0_]+0x50): undefined reference to `QVariant::QVariant(bool)'
/tmp/cciGGVit.o: In function `QTypedArrayData<char>::deallocate(QArrayData*)':
connect.cpp:(.text._ZN15QTypedArrayDataIcE10deallocateEP10QArrayData[_ZN15QTypedArrayDataIcE10deallocateEP10QArrayData]+0x1e): undefined reference to `QArrayData::deallocate(QArrayData*, unsigned long, unsigned long)'
/tmp/cciGGVit.o: In function `QTypedArrayData<unsigned short>::deallocate(QArrayData*)':
connect.cpp:(.text._ZN15QTypedArrayDataItE10deallocateEP10QArrayData[_ZN15QTypedArrayDataItE10deallocateEP10QArrayData]+0x1e): undefined reference to `QArrayData::deallocate(QArrayData*, unsigned long, unsigned long)'
/tmp/cciGGVit.o: In function `QHash<QString, QVariant>::QHash()':
connect.cpp:(.text._ZN5QHashI7QString8QVariantEC2Ev[_ZN5QHashI7QString8QVariantEC5Ev]+0xf): undefined reference to `QHashData::shared_null'
/tmp/cciGGVit.o: In function `QHash<QString, QVariant>::reserve(int)':
connect.cpp:(.text._ZN5QHashI7QString8QVariantE7reserveEi[_ZN5QHashI7QString8QVariantE7reserveEi]+0x56): undefined reference to `QHashData::rehash(int)'
/tmp/cciGGVit.o: In function `QStaticStringData<1>::data_ptr() const':
connect.cpp:(.text._ZNK17QStaticStringDataILi1EE8data_ptrEv[_ZNK17QStaticStringDataILi1EE8data_ptrEv]+0x36): undefined reference to `qt_assert(char const*, char const*, int)'
/tmp/cciGGVit.o: In function `QStaticStringData<2>::data_ptr() const':
connect.cpp:(.text._ZNK17QStaticStringDataILi2EE8data_ptrEv[_ZNK17QStaticStringDataILi2EE8data_ptrEv]+0x36): undefined reference to `qt_assert(char const*, char const*, int)'
/tmp/cciGGVit.o: In function `QStaticStringData<5>::data_ptr() const':
connect.cpp:(.text._ZNK17QStaticStringDataILi5EE8data_ptrEv[_ZNK17QStaticStringDataILi5EE8data_ptrEv]+0x36): undefined reference to `qt_assert(char const*, char const*, int)'
/tmp/cciGGVit.o: In function `QStaticStringData<4>::data_ptr() const':
connect.cpp:(.text._ZNK17QStaticStringDataILi4EE8data_ptrEv[_ZNK17QStaticStringDataILi4EE8data_ptrEv]+0x36): undefined reference to `qt_assert(char const*, char const*, int)'
/tmp/cciGGVit.o: In function `QStaticStringData<3>::data_ptr() const':
connect.cpp:(.text._ZNK17QStaticStringDataILi3EE8data_ptrEv[_ZNK17QStaticStringDataILi3EE8data_ptrEv]+0x36): undefined reference to `qt_assert(char const*, char const*, int)'
/tmp/cciGGVit.o:connect.cpp:(.text._ZNK17QStaticStringDataILi10EE8data_ptrEv[_ZNK17QStaticStringDataILi10EE8data_ptrEv]+0x36): more undefined references to `qt_assert(char const*, char const*, int)' follow
/tmp/cciGGVit.o: In function `int qRegisterMetaType<Qt::TimeSpec>(char const*, Qt::TimeSpec*, QtPrivate::MetaTypeDefinedHelper<Qt::TimeSpec, QMetaTypeId2<Qt::TimeSpec>::Defined&&(!QMetaTypeId2<Qt::TimeSpec>::IsBuiltIn)>::DefinedType)':
connect.cpp:(.text._Z17qRegisterMetaTypeIN2Qt8TimeSpecEEiPKcPT_N9QtPrivate21MetaTypeDefinedHelperIS4_Xaasr12QMetaTypeId2IS4_E7DefinedntsrS9_9IsBuiltInEE11DefinedTypeE[_Z17qRegisterMetaTypeIN2Qt8TimeSpecEEiPKcPT_N9QtPrivate21MetaTypeDefinedHelperIS4_Xaasr12QMetaTypeId2IS4_E7DefinedntsrS9_9IsBuiltInEE11DefinedTypeE]+0x32): undefined reference to `QMetaObject::normalizedType(char const*)'
/tmp/cciGGVit.o: In function `QStaticStringData<17>::data_ptr() const':
connect.cpp:(.text._ZNK17QStaticStringDataILi17EE8data_ptrEv[_ZNK17QStaticStringDataILi17EE8data_ptrEv]+0x36): undefined reference to `qt_assert(char const*, char const*, int)'
/tmp/cciGGVit.o: In function `QStaticStringData<12>::data_ptr() const':
connect.cpp:(.text._ZNK17QStaticStringDataILi12EE8data_ptrEv[_ZNK17QStaticStringDataILi12EE8data_ptrEv]+0x36): undefined reference to `qt_assert(char const*, char const*, int)'
/tmp/cciGGVit.o: In function `QStaticStringData<26>::data_ptr() const':
connect.cpp:(.text._ZNK17QStaticStringDataILi26EE8data_ptrEv[_ZNK17QStaticStringDataILi26EE8data_ptrEv]+0x36): undefined reference to `qt_assert(char const*, char const*, int)'
/tmp/cciGGVit.o: In function `QVariant QVariant::fromValue<Qt::TimeSpec>(Qt::TimeSpec const&)':
connect.cpp:(.text._ZN8QVariant9fromValueIN2Qt8TimeSpecEEES_RKT_[_ZN8QVariant9fromValueIN2Qt8TimeSpecEEES_RKT_]+0x28): undefined reference to `QVariant::QVariant(int, void const*, unsigned int)'
/tmp/cciGGVit.o: In function `std::pair<QString, QVariant>::pair<char const (&) [5], QString, true>(char const (&) [5], QString&&)':
connect.cpp:(.text._ZNSt4pairI7QString8QVariantEC2IRA5_KcS0_Lb1EEEOT_OT0_[_ZNSt4pairI7QString8QVariantEC5IRA5_KcS0_Lb1EEEOT_OT0_]+0x4b): undefined reference to `QVariant::QVariant(QString const&)'
/tmp/cciGGVit.o: In function `std::pair<QString, QVariant>::pair<char const (&) [9], QString, true>(char const (&) [9], QString&&)':
connect.cpp:(.text._ZNSt4pairI7QString8QVariantEC2IRA9_KcS0_Lb1EEEOT_OT0_[_ZNSt4pairI7QString8QVariantEC5IRA9_KcS0_Lb1EEEOT_OT0_]+0x4b): undefined reference to `QVariant::QVariant(QString const&)'
/tmp/cciGGVit.o: In function `std::pair<QString, QVariant>::pair<char const (&) [8], QString, true>(char const (&) [8], QString&&)':
connect.cpp:(.text._ZNSt4pairI7QString8QVariantEC2IRA8_KcS0_Lb1EEEOT_OT0_[_ZNSt4pairI7QString8QVariantEC5IRA8_KcS0_Lb1EEEOT_OT0_]+0x4b): undefined reference to `QVariant::QVariant(QString const&)'
/tmp/cciGGVit.o: In function `std::pair<QString, QVariant>::pair<char const (&) [10], QString, true>(char const (&) [10], QString&&)':
connect.cpp:(.text._ZNSt4pairI7QString8QVariantEC2IRA10_KcS0_Lb1EEEOT_OT0_[_ZNSt4pairI7QString8QVariantEC5IRA10_KcS0_Lb1EEEOT_OT0_]+0x4b): undefined reference to `QVariant::QVariant(QString const&)'
/tmp/cciGGVit.o: In function `std::pair<QString, QVariant>::pair<char const (&) [8], QHash<QString, QVariant>, true>(char const (&) [8], QHash<QString, QVariant>&&)':
connect.cpp:(.text._ZNSt4pairI7QString8QVariantEC2IRA8_Kc5QHashIS0_S1_ELb1EEEOT_OT0_[_ZNSt4pairI7QString8QVariantEC5IRA8_Kc5QHashIS0_S1_ELb1EEEOT_OT0_]+0x4b): undefined reference to `QVariant::QVariant(QHash<QString, QVariant> const&)'
/tmp/cciGGVit.o: In function `QHash<QString, QVariant>::QHash(std::initializer_list<std::pair<QString, QVariant> >)':
connect.cpp:(.text._ZN5QHashI7QString8QVariantEC2ESt16initializer_listISt4pairIS0_S1_EE[_ZN5QHashI7QString8QVariantEC5ESt16initializer_listISt4pairIS0_S1_EE]+0x27): undefined reference to `QHashData::shared_null'
/tmp/cciGGVit.o: In function `QHash<QString, QVariant>::freeData(QHashData*)':
connect.cpp:(.text._ZN5QHashI7QString8QVariantE8freeDataEP9QHashData[_ZN5QHashI7QString8QVariantE8freeDataEP9QHashData]+0x22): undefined reference to `QHashData::free_helper(void (*)(QHashData::Node*))'
/tmp/cciGGVit.o: In function `QHash<QString, QVariant>::findNode(QString const&, unsigned int*) const':
connect.cpp:(.text._ZNK5QHashI7QString8QVariantE8findNodeERKS0_Pj[_ZNK5QHashI7QString8QVariantE8findNodeERKS0_Pj]+0x44): undefined reference to `qHash(QString const&, unsigned int)'
/tmp/cciGGVit.o: In function `QHash<QString, QVariant>::createNode(unsigned int, QString const&, QVariant const&, QHashNode<QString, QVariant>**)':
connect.cpp:(.text._ZN5QHashI7QString8QVariantE10createNodeEjRKS0_RKS1_PP9QHashNodeIS0_S1_E[_ZN5QHashI7QString8QVariantE10createNodeEjRKS0_RKS1_PP9QHashNodeIS0_S1_E]+0x32): undefined reference to `QHashData::allocateNode(int)'
/tmp/cciGGVit.o: In function `int qRegisterNormalizedMetaType<Qt::TimeSpec>(QByteArray const&, Qt::TimeSpec*, QtPrivate::MetaTypeDefinedHelper<Qt::TimeSpec, QMetaTypeId2<Qt::TimeSpec>::Defined&&(!QMetaTypeId2<Qt::TimeSpec>::IsBuiltIn)>::DefinedType)':
connect.cpp:(.text._Z27qRegisterNormalizedMetaTypeIN2Qt8TimeSpecEEiRK10QByteArrayPT_N9QtPrivate21MetaTypeDefinedHelperIS5_Xaasr12QMetaTypeId2IS5_E7DefinedntsrSA_9IsBuiltInEE11DefinedTypeE[_Z27qRegisterNormalizedMetaTypeIN2Qt8TimeSpecEEiRK10QByteArrayPT_N9QtPrivate21MetaTypeDefinedHelperIS5_Xaasr12QMetaTypeId2IS5_E7DefinedntsrSA_9IsBuiltInEE11DefinedTypeE]+0x3c): undefined reference to `QMetaObject::normalizedType(char const*)'
connect.cpp:(.text._Z27qRegisterNormalizedMetaTypeIN2Qt8TimeSpecEEiRK10QByteArrayPT_N9QtPrivate21MetaTypeDefinedHelperIS5_Xaasr12QMetaTypeId2IS5_E7DefinedntsrSA_9IsBuiltInEE11DefinedTypeE[_Z27qRegisterNormalizedMetaTypeIN2Qt8TimeSpecEEiRK10QByteArrayPT_N9QtPrivate21MetaTypeDefinedHelperIS5_Xaasr12QMetaTypeId2IS5_E7DefinedntsrSA_9IsBuiltInEE11DefinedTypeE]+0x7b): undefined reference to `qt_assert_x(char const*, char const*, char const*, int)'
connect.cpp:(.text._Z27qRegisterNormalizedMetaTypeIN2Qt8TimeSpecEEiRK10QByteArrayPT_N9QtPrivate21MetaTypeDefinedHelperIS5_Xaasr12QMetaTypeId2IS5_E7DefinedntsrSA_9IsBuiltInEE11DefinedTypeE[_Z27qRegisterNormalizedMetaTypeIN2Qt8TimeSpecEEiRK10QByteArrayPT_N9QtPrivate21MetaTypeDefinedHelperIS5_Xaasr12QMetaTypeId2IS5_E7DefinedntsrSA_9IsBuiltInEE11DefinedTypeE]+0xb4): undefined reference to `QMetaType::registerNormalizedTypedef(QByteArray const&, int)'
connect.cpp:(.text._Z27qRegisterNormalizedMetaTypeIN2Qt8TimeSpecEEiRK10QByteArrayPT_N9QtPrivate21MetaTypeDefinedHelperIS5_Xaasr12QMetaTypeId2IS5_E7DefinedntsrSA_9IsBuiltInEE11DefinedTypeE[_Z27qRegisterNormalizedMetaTypeIN2Qt8TimeSpecEEiRK10QByteArrayPT_N9QtPrivate21MetaTypeDefinedHelperIS5_Xaasr12QMetaTypeId2IS5_E7DefinedntsrSA_9IsBuiltInEE11DefinedTypeE]+0x107): undefined reference to `QMetaType::registerNormalizedType(QByteArray const&, void (*)(void*), void* (*)(void*, void const*), int, QFlags<QMetaType::TypeFlag>, QMetaObject const*)'
/tmp/cciGGVit.o: In function `QHash<QString, QVariant>::insert(QString const&, QVariant const&)':
connect.cpp:(.text._ZN5QHashI7QString8QVariantE6insertERKS0_RKS1_[_ZN5QHashI7QString8QVariantE6insertERKS0_RKS1_]+0xd6): undefined reference to `QVariant::operator=(QVariant const&)'
/tmp/cciGGVit.o: In function `QHashNode<QString, QVariant>::~QHashNode()':
connect.cpp:(.text._ZN9QHashNodeI7QString8QVariantED2Ev[_ZN9QHashNodeI7QString8QVariantED5Ev]+0x18): undefined reference to `QVariant::~QVariant()'
/tmp/cciGGVit.o: In function `QHash<QString, QVariant>::detach_helper()':
connect.cpp:(.text._ZN5QHashI7QString8QVariantE13detach_helperEv[_ZN5QHashI7QString8QVariantE13detach_helperEv]+0x39): undefined reference to `QHashData::detach_helper(void (*)(QHashData::Node*, void*), void (*)(QHashData::Node*), int, int)'
/tmp/cciGGVit.o: In function `QHash<QString, QVariant>::findNode(QString const&, unsigned int) const':
connect.cpp:(.text._ZNK5QHashI7QString8QVariantE8findNodeERKS0_j[_ZNK5QHashI7QString8QVariantE8findNodeERKS0_j]+0x91): undefined reference to `qt_assert(char const*, char const*, int)'
/tmp/cciGGVit.o: In function `QHashNode<QString, QVariant>::QHashNode(QString const&, QVariant const&, unsigned int, QHashNode<QString, QVariant>*)':
connect.cpp:(.text._ZN9QHashNodeI7QString8QVariantEC2ERKS0_RKS1_jPS2_[_ZN9QHashNodeI7QString8QVariantEC5ERKS0_RKS1_jPS2_]+0x5b): undefined reference to `QVariant::QVariant(QVariant const&)'
/tmp/cciGGVit.o: In function `QHashNode<QString, QVariant>::same_key(unsigned int, QString const&) const':
connect.cpp:(.text._ZNK9QHashNodeI7QString8QVariantE8same_keyEjRKS0_[_ZNK9QHashNodeI7QString8QVariantE8same_keyEjRKS0_]+0x32): undefined reference to `operator==(QString const&, QString const&)'
collect2: error: ld returned 1 exit status
Makefile:26: recipe for target 'connect' failed
make: *** [connect] Error 1