2013-07-26 32 views
3

我想問一下msvcr100在msvcrt上是否有優勢,以及優點是什麼。msvcr100優於msvcrt

使用msvc編譯器編譯時,我得到的可執行文件鏈接到msvcr100,因此它需要安裝MS Visual C++ Redistributable。如果我用g ++(mingw)編譯它,那麼就沒有這樣的要求。相反,我猜它與msvcrt有關。

我寧願將依賴關係保持在最低限度,所以我想知道在使用鏈接到mscvr100的編譯器時是否有任何意義。

謝謝。

+0

使用mingw並不能節省您不得不運送msvcrt.dll,請參閱[我應該使用我的應用程序重新分發msvcrt.dll嗎?](http://stackoverflow.com/questions/1073509/should-i-redistribute- msvcrt-dll-with-my-application) –

+2

@BenVoigt現在很長一段時間,msvcrt.dll一直是系統DLL。你可以依賴它的存在,就像你依賴user32.dll,kernel32.dll等一樣。 –

回答

2

如果您使用的是晚於版本6的MS編譯器,那麼您將不得不鏈接到特定於該編譯器的運行時。你在這件事上沒有任何選擇。由於MSVC運行時不是系統DLL,因此您需要將它們分發給您的應用程序。

如果您使用MSVC6或可以鏈接到msvcrt.dll的編譯器,那麼您可以鏈接到msvcrt.dll。

mingw編譯器是相當可配置的。但是,我相信它通常會鏈接到msvcrt.dll。由於msvcrt.dll是一個系統DLL(自Windows 2000 IIRC以來),因此您無需分發它。

我假設你所有這些都是動態鏈接到運行時。這是首選選項,但始終可以靜態鏈接到運行時。當你這樣做時,你可以使你的應用程序獨立。

這一切歸結爲你喜歡使用哪個編譯器。如果您更喜歡使用現代MSVC,那麼您需要接受運行時分佈,或靜態鏈接。

+0

你有什麼想法,爲什麼MSVCR庫不是系統DLL?很顯然,在任何Windows機器上遲早都需要這些MSVCR庫...... – cubuspl42

+0

Windows和VS團隊在MS上是分開的。我想他們更容易避免相互依賴。這兩支隊伍都將取得更好的進展。更重要的是,CRT的新版本將如何在Windows版本上找到它的方式,該版本在CRT之前?例如,VS12的運行時間如何顯示在XP,Vista或7上? –

5

Msvcrt.dll是專用 DLL,旨在僅供Windows自己使用。不同版本的Windows有不同版本的msvcrt.dll。

當您發現使用CRT的方式導致特定Windows版本出現故障時,您會感到頭疼。包括那種需要時間機器的故障,新版本的Windows可能會有一個msvcrt.dll的新副本,使您的程序失敗。一個問題,否則稱爲DLL地獄。

使用msvcr100.dll的好處是發生的機率是多得多較小。您可以使用已知的版本的CRT。即使Windows本身發生了一次突破性的改變,它會打破msvcr100.dll,但仍然有一個解決方案:您可以更新它。這對於msvcr.dll是不可能的,它是由文件系統保護功能覆蓋的DLL。用安裝程序覆蓋它通常會非常糟糕,因爲這可能會破壞Windows本身。但它不會導致失敗,Windows會自動恢復它。另外你不應該效仿福伊特的建議。