2013-02-05 51 views
0

我的目標是通過靜態鏈接來避免安裝Microsoft C++ 2010。因爲我不知道該軟件包是否將安裝在所有客戶計算機上,並且他的IT部門不允許安裝軟件。靜態鏈接C++ 2010失敗

另一個選擇是避免使用管理權限。 (提取DLL在我的程序相同的目錄,例如)

我找到了一個可能的解決方案http://social.msdn.microsoft.com/Forums/en-US/vclanguage/thread/ab187afb-3af0-44ba-a03c-dde9e5208a1a/,我嘗試了參數/噸。

我有2個錯誤:

ERREUR 1錯誤LNK2019:symbole externe非rÚsolu__CrtDbgReportW rÚfÚrencÚ丹斯LA fonction「無效__cdecl的std :: _ Debug_message(wchar_t的 常量*,爲wchar_t const的*,無符號整型)」 (_Debug_message @ @@ STD @ YAXPB_W0I Z)C:?\ Users \用戶菲利普\下載\便攜式 設備COM API示例\ C++ \ libcpmtd.lib(stdthrow.obj)WpdApiSample

ERREUR 2錯誤LNK1120: 1 externes non rÚsolusC:\ Users \ philippe \ Downloads \ Portabl E器件COM API 樣品\ C++ \調試\ WpdApiSample.exe 11個WpdApiSample

難道我的好辦法嗎?我該如何解決這個問題?

+2

首先,你想建立一個發佈版本,而不是調試版本,如果你要在所有分發軟件! –

+0

好吧,你是對的。編譯時我沒有更多的錯誤。我如何驗證它不需要使用Microsoft運行時? –

+1

使用Dependency Walker(http://www.dependencywalker.com/)檢查您的程序。確保你沒有看到任何'msvcrt * .dll'條目。 – nneonneo

回答

2

_CrtDbgReportW的「要求」部分的文件說:

庫:只有C運行時庫調試版本。

這意味着這樣的函數不存在於庫的發佈版本中,因此,您的代碼的發佈版本不應該調用它們。

根據this table可能會推薦使用/MTd,以便您鏈接到靜態調試版本。

+0

隨着/ MT在發佈它非常好。我使用依賴walker,我發現msvcrt * .dll不使用。 –

1
發佈配置

/MT,/ MTD調試