none
VC 2005 Execute Error? RRS feed

  • 一般討論

  • 當我使用VC2005時發生了與其它版友討論的問題一樣, 在Dev環境下程式執行一切正常, 但在其它user機器執行時就發生錯誤.
    我試者使用VC 2003與2005 建立一個simple win32程式
    2003 /MT /MD 2005 /MT 正常
    2005 /MD 在其它機器上無法執行

    這是由 IDE 產生的編譯 param
    /O2 /GL /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /FD /EHsc /MD /Yu"stdafx.h" /Fp"Release\TestWin32.pch"
    /Fo"Release\\" /Fd"Release\vc80.pdb" /W3 /nologo /c /Zi /TP /errorReportStick out tonguerompt

    /VERBOSE /OUT:"TestWin32.exe" /INCREMENTAL:NO /NOLOGO
    /MANIFEST /MANIFESTFILE:"Release\TestWin32.exe.intermediate.manifest"
    /DEBUG /PDB:"d:\HBO_SRC\TestWin32.pdb" /SUBSYSTEM:WINDOWS
    /LTCG /MACHINE:X86 /ERRORREPORTStick out tongueROMPT kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib

    希望能夠有解決這方面的訊息能夠提供謝謝
    2007年3月28日 上午 08:31

所有回覆

  • 我後來自己 NEW 一個沒有任何設定的環境, 不使用預設的 Debug 和 Release
    產生的 Code 可以在沒有 VC2005 轉發套件 or .NET 的環境跑
    (開發除錯時候還是用 Debug 模式)

    不然就是在 "Visual Studio 2005 命令提示字元" 用 cl 編譯, 這種更乾淨

    2007年3月28日 上午 11:44
  • 感謝您的回應
    基本上我試了方法 發現因為預設的專案define 是 Multi-threaded (/MT) 所以可以編譯過. 在任何機器上執行
    但當我選擇 Multi-threaded DLL (/MD) MutiThread Dynamic Link 時,
    link 程式 會去link到 \MSVCRT.lib 這個 lib's _WinMainCRTStartup ... 導引載入 MSVCR80.dll <=我猜想這個dll可能是.Net Framework 的元件. 因為在 TestWin32.exe.intermediate.manifest 內的訊息

    <?xml version='1.0' encoding='UTF-8' standalone='yes'?>
    <assembly xmlns='urnTongue Tiedchemas-microsoft-com:asm.v1' manifestVersion='1.0'>
      <dependency>
        <dependentAssembly>
          <assemblyIdentity type='win32' name='Microsoft.VC80.CRT' version='8.0.50727.762' processorArchitecture='x86' publicKeyToken='1fc8b3b9a1e18e3b' />
        </dependentAssembly>
      </dependency>
    </assembly>

    導致在其它機器上 .DLL 版本不對, 程式執行錯誤
    然後我試了 cl 指令發現 如果不下 /MD 參數 預設 cl 還是會使用 /MT 作為參數. 意思跟上面的情況相同.
    2007年3月28日 下午 12:29