2013-01-10 43 views
1

我在Windows上用WinDBus構建了Qt。 Qt的本身建行,但QDbus例子建立失敗消息QtDBus鏈接錯誤

moc_car_adaptor_p.obj : error LNK2001: unresolved external 
symbol "public: static struct QMetaObject const 
QDBusAbstractAdaptor::staticMetaObject" 
([email protected]@@[email protected]@B) 

文件夾E:\qt\4.6.4\msvc2008\lib包含QtDBus4.dll QtDBus4.lib QtDBusd4.dll和QtDBusd4.lib。全部包含'[email protected]@@[email protected]@B'字符串。

如何解決?

事先感謝,伊利亞。

UPD: 所有.PRO文件都來自DBus示例,我沒有改變任何東西。例如:

###################################################################### 
# Automatically generated by qmake (2.01a) Mon Aug 28 19:50:14 2006 
###################################################################### 

TEMPLATE = app 
TARGET = 
DEPENDPATH += . 
INCLUDEPATH += . 
CONFIG += qdbus 

# Input 
# DBUS_ADAPTORS += car.xml 
HEADERS += car.h car_adaptor_p.h 
SOURCES += car.cpp main.cpp car_adaptor.cpp 

# install 
target.path = $$[QT_INSTALL_EXAMPLES]/dbus/remotecontrolledcar/car 
sources.files = $$SOURCES $$HEADERS $$RESOURCES *.pro *.xml 
sources.path = $$[QT_INSTALL_EXAMPLES]/dbus/remotecontrolledcar/car 
INSTALLS += target sources 

symbian: include($$QT_SOURCE_TREE/examples/symbianpkgrules.pri) 

UPD2:是QtCreator產生

命令行:

... moc.exe and cl.exe calls... 
cl -c -nologo -Zm200 -Zc:wchar_t- -Zi -MDd -GR -EHsc -W3 -w34100 -w34189 
-DUNICODE -DWIN32 -DQT_LARGEFILE_SUPPORT -DQT_DLL -DQT_GUI_LIB -DQT_CORE_LIB 
-DQT_THREAD_SUPPORT -I"..\..\..\..\msvc2008\include\QtCore" -I"..\..\..\..\msvc2008 
\include\QtGui" -I"..\..\..\..\msvc2008\include" -I"..\..\..\..\msvc2008\include 
\QtDBus" -I"..\car" -I"debug" -I"..\..\..\..\msvc2008\include\ActiveQt" -I"." 
-I"..\..\..\..\msvc2008\mkspecs\win32-msvc2008" 
-Fodebug\ @C:\DOCUME~1\resu\LOCALS~1\Temp\moc_car_adaptor_p.obj.432.2453.jom 
moc_car_adaptor_p.cpp 

link /LIBPATH:"e:\qt\4.6.4\msvc2008\lib" /NOLOGO /DEBUG /MANIFEST 
/MANIFESTFILE:"debug\car.intermediate.manifest" /SUBSYSTEM:WINDOWS 
/MANIFESTDEPENDENCY:type='win32' name='Microsoft.Windows.Common-Controls' 
version='6.0.0.0' publicKeyToken='6595b64144ccf1df' language='*' 
processorArchitecture='*'" /OUT:debug\car.exe @C:\DOCUME~1\resu\LOCALS~1 
\Temp\car.exe.432.3734.jom 

選項我建Qt的有:

configure.exe -platform win32-msvc2008 -shared -debug-and-release -dbus -dbus-linked 
-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 -phonon -phonon- 
backend -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 
+0

.pro文件是什麼樣子? –

+0

我已添加.PRO文件。它與DBus示例中的一樣 – ILYA

+0

用於編譯的命令行是什麼?它鏈接到libQtDBus庫嗎? –

回答

1

的問題是在qdbusmacros.h

#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變成什麼都沒有。

添加

CONFIG += QT_SHARED 

解決了這個問題。

注:在Qt 4.8.4所有工作正常(以前我用過4.6.4)