2011-11-16 60 views
3

在一個非常古老的代碼庫中,我們爲Visual C++項目設置提供了一些構建設置,這些設置令人困惑,看起來並不必要。忽略crt庫的特定庫?

我們的C++項目是使用visual studio(目前使用vs 2010)構建的,並且在鏈接器選項中爲「忽略特定庫」鏈接器設置指定了一些庫。其中一些庫是:msvcirt.lib和msvcrtd.lib。

所以對於這個問題: 我無法弄清楚爲什麼忽略這些特定的圖書館是必要的生活?

我最好的猜測是: 也許這是必要早在視覺工作室的早期? ...出於某種奇怪的原因,只有投入其中的人才知道。

默認情況下,使用VS 2010製作C/C++項目(即.vcxproj),這些庫不會被明確忽略。因此,我99%確信此鏈接器設置在99%的時間內不是必需的。有沒有人同意我的看法?

當我使用dependency walker來檢查我構建的任何舊的DLL時,我可以看到如果我在ADVAPI32.dll中鏈接它是msvcrt.dll的依賴項。但這應該不是我的擔心......

+1

避免在嘗試鏈接使用錯誤設置(例如/ MT vs/MD)編譯的.obj或.lib文件時生成的鏈接程序錯誤是常見的攻擊。真正的解決方法是正確編譯代碼。 –

回答

2

它甚至越來越差。你必須忽略的庫取決於你實際使用的庫(如果你不這樣做最終會遇到像堆損壞等那樣的巨大麻煩)。

因此,給定項目的特性(多線程,單線程,。 )你將不得不使用特定的運行時庫。請查看here以瞭解要使用的運行時庫的概覽。

並且,如果您正在使用運行時庫,則必須忽略其他人。查看here以瞭解要忽略的庫的概況。

+1

對於那些不閱讀德語的人,請嘗試[this](http://msdn.microsoft.com/zh-cn/library/abx4dbyh%28v=vs.110%29.aspx)和[this](http: //msdn.microsoft.com/en-us/library/6wtdswk0%28v=vs.110%29.aspx)。 – patrickvacek