我們有一個Visual Studio 2015驅動程序項目。出於各種原因,我們使用「make」(爲Windows構建的unix工具)來構建我們的整個產品。最好還是使用make構建僅用於窗口的組件(保持構建過程一致)。無法複製Visual Studio Build
運行Server 2012R2,VS 2015年更新3,10 DDK和SDK 10
該項目建立在罰款和VS2015司機的作品,所以,代碼庫是好的。
我啓用了詳細的構建輸出,並捕獲了分析VS正在做什麼來構建項目(驅動程序只是一堆C文件,似乎沒有太驚人的獨特性)。 VS構建設置LIB,LIBPATH和INCLUDE變量,然後發出一個「cl.exe」命令來構建,然後通過「link.exe」命令進行鏈接。還有建立消息文件(mc.exe)和資源文件「rc.exe」的命令。我捕獲了所有這些命令並將它們合併到makefile中。
我可以讓項目編譯,但是,我的問題是與鏈接階段。我會在幾行中顯示錯誤。我試圖在「VS2015 x64本機工具命令提示符」(%comspec% /k ""C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\vcvarsall.bat"" amd64
)中自行運行命令(來自日誌),我也遇到了同樣的錯誤。
當我聯繫,我得到:
LINK : error LNK2001: unresolved external symbol GsDriverEntry
os_win.obj : error LNK2001: unresolved external symbol __stdio_common_vsprintf
winbuild\x64\Win7Release\driver.sys : fatal error LNK1120: 2 unresolved externals
我不得不作出從VS記錄中的cl.exe命令行,這是指定/ GS-一個變化(VS啓用該選項)。否則,當我運行的編譯和鏈接命令對應的,我得到了一堆額外的錯誤:
os_win.obj : error LNK2001: unresolved external symbol __security_cookie
所以,谷歌搜索的vsprintf中的錯誤,我碰到建議帶着legacy_stdio_definitions.lib
鏈接訪問這些功能,但沒有工作(使用Cygwin的nm.exe檢查的lib,結果表明,vsprintf函數是ü ndefined。
如果我從編譯文件,我失去了約GsDriverEntry是不確定的錯誤,但我仍然有vsprintf中的錯誤。
我試過還刪除了/ no defaultlib鏈接選項...沒有效果。
因此,我對於發生了什麼事情感到完全喪失。對我來說沒有意義,VS可以構建項目,但我不能,使用相同的命令。我錯過了什麼細節或概念?
我的鏈接命令行:
link /OUT:Win7Release/driver.sys \
/NOLOGO /INCREMENTAL:NO /IGNOREIDL /OPT:ICF /MAP /SUBSYSTEM:CONSOLE /OPT:REF \
/PDB:none /MACHINE:X64 /MANIFEST:NO /WX /PROFILE /kernel /Driver /RELEASE \
/VERSION:"10.0" /osversion:10.0 /ENTRY:"GsDriverEntry" \
/IGNORE:4198,4010,4037,4039,4065,4070,4078,4087,4089,4221,4108,4088,4218,4218,4235 \
/ERRORREPORT:PROMPT /MERGE:"_TEXT=.text;_PAGE=PAGE" /SECTION:"INIT,d" \
/IMPLIB:"Win7Release/driver.lib" /SUBSYSTEM:NATIVE",6.01" \
.. list of obj files .. \
kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib \
shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib \
legacy_stdio_definitions.lib ntoskrnl.lib hal.lib wmilib.lib BufferOverflowK.lib
回答你自己的問題很好,但如果你想要另一個問題的答案,它需要另一個問題。 –
當您從_VS_ build獲取命令時,您是否還捕獲了工具運行時出現的shell環境字符串? 'cl.exe'和'link.exe'對其中的一些很敏感。 – bobbogo