Здравствуйте!
При сборке примера RemoteCarController вылезает сообщение:
moc_car_adaptor_p.obj : error LNK2001: unresolved external symbol "public: static struct QMetaObject const QDBusAbstractAdaptor::staticMetaObject" (?staticMetaObject@QDBusAbstractAdaptor@@2UQMetaObject@@B)
Как собирал Qt:
Скачал WinDBus http://sourceforge.net/projects/windbus
Скопировал исходники в E:\qt\4.6.4\msvc2008\src\dbus\dbus\
Скопировал DLL-ки в E:\qt\4.6.4\msvc2008\bin, .lib-файлы в E:\qt\4.6.4\msvc2008\lib
Добавил файл http://dbus.freedesktop.org/doc/api/html/dbus-arch-deps_8h_source.html
Запустил из VS2008 CommandPrompt
nmake confclean
configure.exe -platform win32-msvc2008 -shared -debug-and-release -dbus -qt-sql-sqlite -qt-sql-psql -no-qt3support -qt-zlib -qt-gif -qt-libpng -qt-libmng -qt-libtiff -qt-libjpeg -openssl-linked -confirm-license -opensource -no-phonon -no-webkit -nomake demos -nomake examples OPENSSL_LIBS="-lssleay32MD -llibeay32MD" -I "C:\OpenSSL-Win32\include" -I "C:\Progra~1\PostgreSQL\8.4\include" -I E:\qt\4.6.4\msvc2008\src\dbus" -I E:\qt\4.6.4\msvc2008\src\dbus\dbus" -L "C:\Progra~1\PostgreSQL\8.4\lib" -L "C:\OpenSSL-Win32\lib\VC\static" -l ws2_32 -l gdi32 -l user32 -l crypt32 -l advapi32
nmake
Файлы E:\qt\4.6.4\msvc2008\lib\QtDBus(d)4.(lib|dll) появились, но сборка вылетела:
Creating library ..\..\..\..\plugins\script\qtscriptdbusd4.lib and object ..\
..\..\..\plugins\script\qtscriptdbusd4.exp
main.obj : error LNK2001: unresolved external symbol "public: static struct QMetaObject const QDBusConnection::staticMetaObject" (?staticMetaObject@QDBusConnection@@2UQMetaObject@@B)
main.obj : error LNK2001: unresolved external symbol "public: static struct QMetaObject const QDBusConnectionInterface::staticMetaObject" (?staticMetaObject@QDBusConnectionInterface@@2UQMetaObject@@B)
main.obj : error LNK2001: unresolved external symbol "public: static struct QMetaObject const QDBusAbstractInterface::staticMetaObject" (?staticMetaObject@QDBusAbstractInterface@@2UQMetaObject@@B)
..\..\..\..\plugins\script\qtscriptdbusd4.dll : fatal error LNK1120: 3 unresolved externals
Ничего не понимаю...
Заранее спасибо!
Отвечаю сам себе: дело было в объявлении QDBUS:
#if defined(QDBUS_MAKEDLL)
# define QDBUS_EXPORT Q_DECL_EXPORT
#elif defined(QT_SHARED)
# define QDBUS_EXPORT Q_DECL_IMPORT
#else
# define QDBUS_EXPORT
#endif
Почему-то в приложении QT_SHARED не был объявлен, и QDBUS_EXPORT превращался в ничто.
Проблема решается так:
DEFINES += QT_SHARED
Замечу, что в Qt 4.8.4 всё заработало сразу.