2012-03-30 46 views
4

作爲一個長期的POSIX/Linux/BSD C開發人員,現在正在試圖用Visual C++ 2010做一些事情,我對這個工具感到困惑,因爲它與GCC工具集的工作方式不太一樣確實。理論上,至少根據文檔,它看起來非常相似(我確信它是這樣),但我沒有看到我期望看到的東西。Windows C運行時庫不像我所期望的那樣鏈接?

在這種情況下,我正在嘗試構建一個C庫,以便稍後在.NET項目中使用,並且我希望稍後避免運行時衝突。我的想法是建立一個靜態庫,鏈接到C運行庫的DLL版本(Debug配置中的msvcr100d.dll),因此我設置了/MDd標誌。但是,當我使用dumpbin.exe檢查生成的.lib輸出時,它不顯示依賴項或導入。

兩個問題,真正做到:

  1. 這是擺在首位一個壞主意?我應該建立一個DLL還是連接靜態CRT?
  2. 爲什麼dumpbin.exe在使用/MDd時不顯示對CRT的依賴?

更新Choosing the Correct C/C++ Runtime Library是相當有幫助和信息。我嘗試了他建議的dumpbin咒語,輸出結果顯示該鏈接與預期的msvcrtd鏈接,但這並不能真正回答我上面的第二個問題。

+0

哇。我仍然在谷歌搜索這個問題,並且這個問題已經在涉及「dumpbin」和「dependents」的搜索中排名第四。他們必須不斷抓取該網站。 – 2012-03-30 17:43:55

+0

除非您使用C++/CLI,否則應該感覺幾乎完全相同。用那個說...代碼...請!如果/當您將問題更新到可解決特定問題的地步時,我會發布問題答案。 – 2012-03-30 17:44:21

+0

@Ramhound:恩......代碼與這個問題無關。這是一個工具問題。我已經提出了具體的問題。如果你不能解決它們,這不是因爲我沒有解釋手頭的問題。 – 2012-03-30 17:46:47

回答

1

因爲這不是最終的EXE或DLL,所以沒有導入部分。相反,有鏈接器指令說明這個lib想要如何鏈接。

dumpbin /directives thoraway.lib 

Microsoft (R) COFF/PE Dumper Version 10.00.40219.01 
Copyright (C) Microsoft Corporation. All rights reserved. 


    Dump of file throwaway.lib 

    File Type: LIBRARY 

    Linker Directives 
    ----------------- 
    /FAILIFMISMATCH:"_MSC_VER=1600" 
    /FAILIFMISMATCH:"_ITERATOR_DEBUG_LEVEL=2" 
    /DEFAULTLIB:"msvcprtd" 
    /DEFAULTLIB:"MSVCRTD" 
    /DEFAULTLIB:"OLDNAMES" 
    /EDITANDCONTINUE 

Summary 

    CFC .debug$S 
     4C .debug$T 
     A2 .drectve 
     B .rdata 
     4 .rtc$IMZ 
     4 .rtc$TMZ 
     49 .text 
+0

啊,好的。這就說得通了。謝謝! – 2012-03-30 18:12:16

相關問題