2009-08-19 33 views
3

Visual Studio 2005項目中的什麼設置可能導致構建不將/ dll參數添加到鏈接器命令行?Visual C++ 2005不會爲鏈接器添加/ dll參數

背景:

我們有我移植到VC 2005年該項目包含了一些MFC擴展DLL的大VC6的項目,我運行到下面的連接器警告,當我運行構建:

警告LNK4086:入口點'_WinMainCRTStartup'不是帶有12字節參數的__stdcall;圖像可能無法運行

對_WinMainCRTStartup的引用是高度可疑的,因爲這是一個DLL(它根本不應該有_WinMainCRTStartup函數)。搜索源代碼表明沒有定義這樣的函數,所以我的結論是它由鏈接器提供給我們。

審查的linker.exe命令行參數說明問題了(我已經刪除完整路徑爲簡潔起見):

/OUT:"Debug\thedll.dll「/增量/清單/ manifest資源配置文件:」調試\ thedll.dll.intermediate.manifest「/DEF:".\thedll.def」/ DEBUG /PDB:"\Debug\thedll.pdb「/ SUBSYSTEM:WINDOWS/MACHINE:X86 version.lib

有一個非常關鍵的命令行參數丟失:/ DLL

如果我手動添加此參數(使用項目屬性,配置屬性\鏈接器\命令行設置),我可以編譯的東西正常。

但我想知道項目配置中的什麼導致linker.exe的/ DLL命令行設置被遺漏?

我已經創建了一個擴展DLL的臨時項目,並且我已經完成了對.vcproj文件的並排比較,但是我看不到任何會影響此設置的特定設置。

編輯 - 我檢查了Configuration Properties的Configuration Properties \ General \ Project Defaults設置。它設置爲動態庫(.dll)

編輯2 - 顯然,VS忽略了設置,直到我手動調整它。 rggggg

+0

0123更多關於此問題的想法 - 其中是什麼導致鏈接器/ ICREMENTAL標誌被包含在調試配置中但在發佈配置中被排除的設置?也許我的問題是在同一個地方... – 2009-08-19 20:28:08

+0

有線我現在在同一個問題,現在我們仍然保持VS2005項目之一。最後它解決了它自己,我希望我能弄清楚它爲什麼會這樣做(我懷疑與pch有關)。 – dashesy 2012-09-12 22:44:02

回答

1

我可以建議的第一件事是驗證項目的配置類型設置爲動態庫。右鍵單擊項目 - >選擇屬性 - >選擇常規 - >配置類型。

+0

謝謝 - 我檢查了一個已經(並添加了一個編輯到OP指示正確的值) – 2009-08-19 20:14:56

+0

我只是將它改爲EXE爲我的項目,然後再回到DLL。點擊應用,現在/ DLL出現在命令行中。在他們的圖形用戶界面中將3小時的浪費時間浪費在M $的不良變更處理算法上。 – 2009-08-19 20:42:56

+0

僅供參考,以下是描述/ DLL參數以及如何設置它的MSDN文章:http://msdn.microsoft。COM/EN-US /庫/ 527z7zfs%28VS.71%29.aspx – 2009-08-19 20:43:27

0

看來,鏈接器想構建一個控制檯程序。打開項目屬性。選擇常規設置。在那裏選擇配置類型動態庫。