qtqjson

Qt - undefined reference to QJsonValue::toString


I'm trying to build a sample project using Qt 5.7 over Linux. Previously, the same project have been built with Qt 5.4.2 without issues. When I try with Qt 5.7, I get the followings errors:

undefined reference to `QJsonValue::toString() const'

I have tried installing Qt5.7 with Qt Maintenance Tool and also download from Qt official site and install it using .run file. When I run a locate to qjsonvalue I get the followings results:

$ locate qjsonvalue
/opt/Qt/5.4/Src/qtbase/include/QtCore/qjsonvalue.h
/opt/Qt/5.4/Src/qtbase/src/corelib/json/qjsonvalue.cpp
/opt/Qt/5.4/Src/qtbase/src/corelib/json/qjsonvalue.h
/opt/Qt/5.4/android_armv7/include/QtCore/qjsonvalue.h
/opt/Qt/5.4/android_x86/include/QtCore/qjsonvalue.h
/opt/Qt/5.4/gcc_64/include/QtCore/qjsonvalue.h
/usr/include/qt5/QtCore/qjsonvalue.h
/usr/share/doc/qt5/qtcore/qjsonvalue-members.html
/usr/share/doc/qt5/qtcore/qjsonvalue.html

According with the previous results, seems that I need to install something becuase qjsonvalue.h/cpp is not in my Qt5.7 core. Any ideas about how to solve it? Need to install anything else? As note, when I start Qt Maintenance Tool I get an alert message that says the following:

Your installation seems to be corrupted. Please consider re-installing from scratch.

Solution

  • Found this comming here via google. I had the same issue.

    The API changed from a default argument
    QString QJsonValue::toString(const QString & defaultValue = QString()) const
    to two overloads.
    QString QJsonValue::toString() const
    QString QJsonValue::toString(const QString &defaultValue) const

    You should build with the headers of the oldest version you want to support. But if you just need this one error fixed you can just change the call from

    QJsonValue someval;
    QString str = someval.toString();
    

    to

    QString str = someval.toString(QString());
    

    But you will probably get some other linker error in the wake of fixing this one.