2012-11-21 138 views
2

我正在嘗試構建libxml2庫,VS 2012編譯並鏈接到DDK 7頭和庫。與VS 2005它建立罰款,但VS 2012,我得到一個鏈接器錯誤。上產生的符號的仔細檢查 -鏈接器錯誤(VS 2005 VS VS 2012)

2005年VS,

Found __imp___vsnprintf 
    Referenced in error.obj 
    Referenced in xmlreader.obj 
    Referenced in xmlwriter.obj 
    Referenced in xmlstring.obj 
    Loaded msvcrt.lib(msvcrt.dll) 

上VS 2012,

error.obj  : error LNK2019: unresolved external symbol __imp__vsnprintf 
           referencedin function ___xmlRaiseError 
xmlreader.obj : error LNK2001: unresolved external symbol __imp__vsnprintf 
xmlwriter.obj : error LNK2001: unresolved external symbol __imp__vsnprintf 
xmlstring.obj : error LNK2001: unresolved external symbol __imp__vsnprintf 

__imp__vsnprintf__imp___vsnprintf上VS 2012和分別用於相同功能的VS 2005(請注意在VS 2005中的vsnprintf之前的額外_)。我在構建日誌中查看了VS 2005和VS 2012的編譯器和鏈接器選項。兩者都是一樣的。通過傳遞給編譯器的showIncludes選項,我可以看到在VS 2005和VS 2012上用於源文件的標頭完全相同。

爲什麼VS 2012中的符號生成有所不同?如何通過編譯和鏈接缺省頭文件和庫來解決問題?

謝謝。

+0

您是否檢查過所有庫是使用相同的RuntimeLibrary(DLL,MT/ST,Debug/Release)參數構建的? 另外,您正在鏈接的是什麼版本的MSVCRT.lib? –

+0

@MichaelSh使用'/ MD','/ D NDEBUG'進行編譯。 'DDK 7/lib/wxp'中有'msvcrt.lib'。 – Mahesh

+0

嘗試從安裝VS2012的文件夾中使用msvcrt.lib –

回答

1

請勿使用DDK來構建用戶模式組件。代表Driver Development Kit。將它用於用戶模式是未定義的行爲。改爲使用SDK