文章

顯示從 3月, 2016 起發佈的文章

[筆記] Microsoft WDK 遇上 Intel Parallel Studio XE 2016 的問題

圖片
開發緣由        開發語音處理和加解密的產品,公司打算在 kernel mode 使用  Intel® Integrated Performance Primitives (Intel® IPP)  9.0 和 Cryptography 的函式庫。因此,分別安裝微軟的 WDK (Windows Driver Kits),以及英特爾的 Parallel Studio XE 2016。雖然 Parallel Studio 本身有自帶編譯器,不過我們最終要用在 OS kernel,所以必須以 WDK 為編譯器,再將 IPP 函式庫連結進來。 遇上問題        在 WDK 編譯代碼的過程遇上了問題,錯誤訊息如下。從訊息來看,連結時找不到 _byteswap_ulong 函式的定義,而 ComputeDigestSHA1.obj 這部分來自英特爾的 Cryptography 函式庫。       (pcpsha1ca_n0---ComputeDigestSHA1.obj) : error LNK2001: unresolved external symbol _byteswap_ulong       (pcpsha1ca_e9---ComputeDigestSHA1.obj) : error LNK2001: unresolved external symbol _byteswap_uint64        我在 WDK 目錄下找到 wdm.h 有定義 _byteswap_ulong 函式,屬於內建函式,而且在 WDK 裡面已經用 RtlUlongByteSwap 來代替上述的函式,難怪我從 WDK 裡面的所有 library 中始終找不到 _byteswap_ulong symbol。基本上,要解決這個問題只要將 Cryptography 重新用 WDK 編譯一次應該就能搞定了,可惜我沒有 Crypto 代碼,必須想其他方式解決。圖一所是為函式的完整定義。 圖一:函式在 wdm.h 原始的定義 解決方式        解決方式就是我重新定義這個函式,如下。利用 #pragma function 這個預處理指令,可參考  https://msdn.microsoft.com/zh-tw/librar