Qт | Возможно ли одновременное использование декларативных и быстрых модулей?

У меня есть проект Qt5, который успешно скомпилирован с shared библиотеками Qt, но я получаю много ошибок (около 130 ошибок), таких как * error: multiple definition of 'XXX', при компиляции его с 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

Почти все множественные определения обнаружены парами:

  • libQt5Декларативная, libQt5Quick
  • libQt5Декларативная, libQt5Qml

Мне нужно libQt5Declarative только для использования MessageDialog в моем qml

Мой .pro файл:

QT       += quick declarative widgets network xml xmlpatterns multimedia

TARGET = MyApp
TEMPLATE = app

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

CONFIG += static

Мои вопросы:

  • Почему он успешно компилируется с общим Qt, но терпит неудачу, когда я компилирую статический Qt?
  • Возможно ли одновременное использование декларативных и быстрых модулей?
  • Я скомпилировал статические библиотеки Qt самостоятельно и, возможно, я сделал это неправильно. Есть ли у Qt официальный пакет статических библиотек?

person CAMOBAP    schedule 05.07.2014    source источник
comment
Вы имеете в виду MessageDialog из QtQuick?   -  person Simon Warta    schedule 06.07.2014
comment
Вы правы, на самом деле MessageDialog принадлежат libQ5Quick, но не libQt5Declarative. Пост обновлен, но все мои вопросы остаются актуальными.   -  person CAMOBAP    schedule 06.07.2014
comment
Спасибо, @Oktalist, не могли бы вы написать ответ, и я его приму   -  person CAMOBAP    schedule 06.07.2014


Ответы (1)


Декларатив Qt предоставляется для совместимости с Qt 4. Я предполагаю, что он не предназначен для связывания с новыми проектами Qt 5. Похоже, что он был включен в состав Qt QML и Qt Quick.

Статические библиотеки не имеют возможности указать, какие из их символов экспортируются, а какие нет, поэтому идентичные частные символы, определенные в двух разных статических библиотеках, могут конфликтовать.

person Oktalist    schedule 06.07.2014