2010-12-03 62 views
2

我有一個模板VS .NET 2003項目,同事們在開發軟件時進行復制和定製。Visual Studio .NET 2003 - 忽略libcmt與libcmtd的特定庫

看來模板被改變了一段時間,將IgnoreSpecificLibrary屬性設置爲對於發佈和調試版本都具有libcmt.lib(即對於版本和調試,構建應該忽略鏈接器中的libcmt.lib)。

基於此的一些項目已經建成,發佈版本通過查看libcmtd.lib(通過查看項目.map文件顯而易見)看起來導致了一些運行時問題(例如,對話窗口被刷新好像已經設置了斷點)。

設置IgnoreSpecificLibrary以排除libcmt.lib自動使項目鏈接對libcmtd.lib?

奇怪的是,構建模板(使用不正確的設置)與libcmt.lib鏈接,而一些自定義項目(儘管不是全部)鏈接到libcmtd.lib。

任何想法?

回答

2

事情是這樣的:

之後編譯鏈接器將你的對象,文件和他人之間 符號表,已創建symol請求尚未滿員。 然後,鏈接程序通過您的庫列表嘗試解決那些未填充符號的 。由於您忽略了libcmt.lib,因此您的第三方庫 已經留下或添加了一些未解析的符號,並且它包含鏈接器請求 以解析來自licmtd.lib(也可能是其他庫)的鏈接器請求,因爲它 已與調試選項。

如果你沒有忽視LIBCMT.LIB這些符號將最有可能得到解決的LIBCMT.LIB 和沒有必要的東西拉從libcmtd.lib(即使 它會被看作解決其他仍然未被填充的符號)

您也可以嘗試使用libcmtd.lib。如果你現在得到了unresolvd externals然後 這是探索性的,不要忽略libcmt.dll一個好主意。

2

許多項目忽略libcmt.lib,因爲它與動態版本msvcrt.lib衝突。 忽略libcmt在鏈接使項目編譯MSVCRT.LIB

+0

這裏的問題是,它是用libcmdt.lib而不是libcmt.lib編譯 - 這是我的困惑所在。如果我聲明忽略libcmt.lib,將libcmtd.lib通過消除過程鏈接起來嗎? – tefd 2010-12-06 16:29:40