0


VS2008 から Qt Creator に移行しています (ただし、Windows ではまだ msvc2008 コンパイラを使用しています)。VS2008 でコンパイルされたライブラリ (.lib) があります。
現在、Windows 上の Qt Creator では、私のプログラムとリンクしていません。未解決の外部情報があります。
なぜそれが起こっているのですか?
すべてのコンパイラ フラグを Visual Studio と同じように設定しようとしました (問題なくリンクしています)。これを引き起こす可能性のあるコンパイラフラグは何ですか? VS コンパイル コマンド:

/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

2 つ目の興味深い点は、Qt Creator on Linux では、同じコード、同じプロジェクトが、Visual Studio でコンパイルされたそのライブラリとリンクし、それらの外部を解決することです。

4

1 に答える 1

0

それを見つけた。
問題は...ブーストバージョンでした!
ライブラリはブースト 1.38 でコンパイルされ、アプリケーションがブースト 1.48 でビルドされ、int32_t が「int」として定義されている場合、「long」として定義された int32_t があります。
したがって、ライブラリからエクスポートされたシンボルは「long FuncName(...)」であり、アプリケーションはライブラリで「int FuncName(...)」を見つけようとして、それを実行できませんでした。
「int」と「long」は私のマシンでは 32 ビットなので、これはまだ奇妙です...それらは同じはずです。

ああ、Linux バージョンは 1.41 でブーストされており、int32_t が「int」として定義されているため、機能しました。

于 2012-08-17T10:13:59.230 に答える