2014-03-13 51 views
4
  1. 標準庫和運行時庫之間有區別嗎?C標準庫在窗口鏈接

  2. Windows中的C標準庫與Windows C RT庫相同嗎?

  3. 它在msvcrt.dll中實現嗎?如果不是,在哪裏呢?

  4. 該庫何時何時鏈接到可執行文件?是否有相對地址的.lib文件?

很抱歉,如果我是混合一些事情......

+0

這取決於您使用的構建工具。 –

回答

2

在Windows中,有3種型號的調試和非調試即6一起

1)單用螺紋 2)多線程MSVCRT.DLL 3)多線程不使用MSVCRT.dll

默認情況下,Windows選擇選項2.這是使用運行時庫的唯一一個。使用選項1和3,將所有內容鏈接到可執行文件中。您可以將該可執行文件從95開始運行到任何Windows計算機,並且它可以正常工作。區別在於情況2文件比情況1或3小很多。重要的是如果您試圖將文件壓縮到CD或軟盤上。情況2也與特定版本的MSVCRT相關聯。例如,如果您在VC6上構建它並嘗試在Windows 7上運行該可執行文件,它將無法工作,除非在W7機器上具有VC6 msvcrt。

問題1:標準和運行時間的區別。案例1 & 3,no。案例2:是的。 .lib只是一個跳轉表。該.dll包含實際代碼

問題2:是不是與問題1相同的問題?

問題3:msvcrt = Microsoft Visual C運行時間。這是運行時庫

問題4:在編譯時,如何在鏈接時使用鏈接器WHEN。在運行時1 & 3它已準備就緒。在情況2中,如何 - 它已經完成。 WHEN - 在跳轉表代碼運行之前,還有一個額外的步驟,即將跳轉表代碼與DLL鏈接起來。這個額外的步驟使得情況2的可執行文件加載速度較慢(而不是任何人會用我們現在擁有的超高速機器注意到它)。

+1

請注意,現代版本的Visual Studio不再包含單線程庫。此外,他們不使用MSVCRT.DLL,他們使用MSVCRTnn.DLL其中nn取決於Visual Studio的版本。 –