2012-08-17 67 views
0


我正在从VS2008迁移到Qt Creator(但仍使用Windows上的msvc2008编译器),我有一个使用VS2008编译的库(.lib)。
现在,在Windows上的Qt Creator中,它没有与我的程序链接,我得到了未解决的外部信息。
任何想法为什么会发生?
我试图设置所有编译器标志与Visual Studio中相同(在它没有问题链接)。 什么不同的编译器标志可以导致这种情况? VS编译命令:lib从VS2008在Qt Creator

/Od /I "XXX\inc" /I ".\GeneratedFiles" /I "C:\QtSDK\Desktop\Qt\4.8.1\msvc2008\include" /I ".\GeneratedFiles\Debug" /I "C:\QtSDK\Desktop\Qt\4.8.1\msvc2008\include\qtmain" /I "C:\QtSDK\Desktop\Qt\4.8.1\msvc2008\include\QtCore" /I "C:\QtSDK\Desktop\Qt\4.8.1\msvc2008\include\QtGui" /I "C:\QtSDK\Desktop\Qt\4.8.1\msvc2008\include\QtSql" /I ".\\" /I "XXX\inc" /D "UNICODE" /D "WIN32" /D "QT_LARGEFILE_SUPPORT" /D "QT_CORE_LIB" /D "QT_GUI_LIB" /D "QT_SQL_LIB" /D "QT_PLUGIN" /D "_AFXDLL" /D "_DEBUG" /D "QT_DLL" /D "_WINDLL" /D "_UNICODE" /FD /EHsc /MDd /Yu"preHeader.h" /Fp"XXX\build\XXX\Debug\XXX.pch" /Fo"CXXX\build\XXX\Debug\\" /Fd"XXX\build\XXX\Debug\vc90.pdb" /nologo /c /Zi /TP /errorReport:prompt 

Qt Creator的编译命令:

cl -c -FIpreHeader.h -YupreHeader.h -Fpdebug\XXX_pch.pch -nologo -Zm200 -Zc:wchar_t -Zi -MDd -GR -EHsc -W3 -w34100 -w34189 -DUNICODE -DWIN32 -DQT_LARGEFILE_SUPPORT -DQT_LARGEFILE_SUPPORT -DQT_SQL_LIB -DQT_DLL -D_UNICODE -DUNICODE -D_AFXDLL -DBOOST_TT_HAS_OPERATOR_HPP_INCLUDED -DQT_DLL -DQT_GUI_LIB -DQT_NETWORK_LIB -DQT_CORE_LIB -DQT_HAVE_MMX -DQT_HAVE_3DNOW -DQT_HAVE_SSE -DQT_HAVE_MMXEXT -DQT_HAVE_SSE2 -DQT_THREAD_SUPPORT -I"c:\QtSDK\Desktop\Qt\4.8.1\msvc2008\include\QtCore" -I"c:\QtSDK\Desktop\Qt\4.8.1\msvc2008\include\QtNetwork" -I"c:\QtSDK\Desktop\Qt\4.8.1\msvc2008\include\QtGui" -I"c:\QtSDK\Desktop\Qt\4.8.1\msvc2008\include\QtSql" -I"c:\QtSDK\Desktop\Qt\4.8.1\msvc2008\include" -I"..\inc" -I"GeneratedFiles" -I"GeneratedFiles\debug" -I"C:\QtSDK\Desktop\Qt\4.8.1\msvc2008\\include" -I"C:\QtSDK\Desktop\Qt\4.8.1\msvc2008\\include\QtCore" -I"c:\lib\boost_1_48_0" -I"c:\QtSDK\Desktop\Qt\4.8.1\msvc2008\include\ActiveQt" -I"GeneratedFiles\debug" -I"c:\QtSDK\Desktop\Qt\4.8.1\msvc2008\mkspecs\win32-msvc2008" -Fodebug\ @XXX\Temp\qrc_resource.obj.1104.11375.jom 

第二个有趣的事情是,在Qt Creator的Linux上,同样的代码,在同一个项目,它与该库的编译链接Visual Studio并解决这些外部问题。

+0

你能显示你的.pro文件吗? (尤其是LIBS和INCLUDEPATH部分,如果你有他们的话) – 2012-08-17 09:36:39

回答

0

找到它。
问题是... boost版本!
使用boost 1.38编译库并将int32_t定义为“long”,其中应用程序使用boost 1.48编译,并将int32_t定义为“int”。
因此从库导出的符号是“long FuncName(...)”,其中应用程序试图在库中找到“int FuncName(...)”,并且无法执行此操作。
这还是很奇怪,因为“int”和“long”在我的机器上是32位的......它们应该是一样的。

哦,Linux版本在1.41中有提升,其中int32_t被定义为“int”,所以它工作。