2012-08-17 8 views
0


VS2008에서 Qt Creator로 마이 그 레이션 중이지만 (여전히 Windows에서는 msvc2008 컴파일러를 사용하고 있습니다) VS2008로 컴파일 된 라이브러리 (.lib)가 있습니다.
이제 Windows의 Qt Creator에서 내 프로그램과 연결되지 않아 해결되지 않은 외부 항목이 있습니다.
그 이유는 무엇입니까?
모든 컴파일러 플래그를 Visual Studio에서와 동일하게 설정하려고 시도했습니다 (아무런 문제없이 링크됩니다). 다른 컴파일러 플래그로 인해이 문제가 발생할 수 있습니까?lib Qt Creator의 VS2008에서

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는 창조주에,이 컴파일 해당 라이브러리와 링크 :

/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는 창조주 명령을 컴파일 : VS 명령은 컴파일 Visual Studio 및 해당 외부를 해결합니다.

+0

.pro 파일을 표시 할 수 있습니까? (특히 LIBS 및 INCLUDEPATH 섹션이있는 경우) –

답변

0

발견.
문제는 ... 부스트 버전이었습니다!
라이브러리는 부스트 1.38로 컴파일되었으며 응용 프로그램이 부스트 1.48로 빌드되고 int32_t가 "int"로 정의 된 "long"으로 정의 된 int32_t를가집니다.
그래서 라이브러리에서 내 보낸 기호가 "long FuncName (...)"이었습니다. 여기서 응용 프로그램은 라이브러리에서 "int FuncName (...)"을 찾으려고 시도했지만 할 수 없었습니다.
"int"와 "long"이 내 컴퓨터에서 32 비트이기 때문에 여전히 이상합니다 ... 동일해야합니다.

아, Linux 버전은 int32_t가 "int"로 정의되어 있기 때문에 1.41에서 boost가 있습니다.