Qt |这是否可以同时使用声明性和快速模块

时间:2014-07-05 09:07:46

标签: c++ qt qt5 qt-quick qtdeclarative

我有成功编译Qt5 Qt库的shared项目,但是在针对* error: multiple definition of 'XXX'进行编译时遇到了很多错误(大约130个错误),例如static Qt库:

/usr/local/Qt-5.3.0/lib/libQt5Quick.a(qquickanimation.o): In function `_q_interpolateShortestRotation(double&, double&, double)':
qquickanimation.cpp:(.text+0x330): multiple definition of `_q_interpolateShortestRotation(double&, double&, double)'
/usr/local/Qt-5.3.0/lib/libQt5Declarative.a(qdeclarativeanimation.o):qdeclarativeanimation.cpp:(.text+0xd80): first defined here
/usr/local/Qt-5.3.0/lib/libQt5Quick.a(qquickanimation.o): In function `_q_interpolateClockwiseRotation(double&, double&, double)':
qquickanimation.cpp:(.text+0x3c0): multiple definition of `_q_interpolateClockwiseRotation(double&, double&, double)'
/usr/local/Qt-5.3.0/lib/libQt5Declarative.a(qdeclarativeanimation.o):qdeclarativeanimation.cpp:(.text+0xe10): first defined here

几乎所有多个定义成对检测到:

  • libQt5Declarative,libQt5Quick
  • libQt5Declarative,libQt5Qml

我只需要libQt5Declarative在我的qml中使用MessageDialog

我的.pro文件:

QT       += quick declarative widgets network xml xmlpatterns multimedia

TARGET = MyApp
TEMPLATE = app

SOURCES += ...
HEADERS  += ...
OTHER_FILES += ...
RESOURCES += ...

CONFIG += static

我的问题是:

  • 为什么它成功编译共享Qt,但在编译静态Qt时失败?
  • 这可以同时使用声明性和快速模块吗?
  • 我自己编译了静态Qt库,也许我做错了,Qt是否有官方静态库包?

1 个答案:

答案 0 :(得分:1)

Qt Declarative is provided for Qt 4 compatibility。我认为它不是为了与新的Qt 5项目相联系而设计的。它似乎已被Qt QML和Qt Quick所包含。

静态库没有指定导出哪些符号以及哪些符号不导出的功能,因此在两个不同的静态库中定义的相同私有符号可能会发生冲突。