Window 下 OpenSSL 編繹過程
1. 下載 ActivePerl-5.12.4.1205 , openssl-0.9.8 , 配置Perl環境變量 , 解壓openssl-0.9.8
2. 進入 CMD ,進入VS2008 / VS2010 命令提示界面. 執行: vcvarsall.bat
3. CD 切入 進入 openssl-0.9.8 解壓目錄 , 執行 perl Configure VC-WIN32
4. 執行 ms\do_ms
5. 修改編譯參數 進入 ms\nt.mak 及 ms\ntdll.mak 移除參數 : /WX /G5
6. 執行 nmake -f ms\ntdll.mak (動態庫) 或者 nmake -f ms\nt.mak (靜態庫)
本人編繹結果是: VS2010編繹 nmake -f ms\ntdll.mak 通過 , VS2008 編繹 nmake -f ms\nt.mak 通過
其中 VS2008 ntdll.mak 編繹通過,但運行異常。
7. cd out32dll 或 cd out32 切入輸出目錄,執行命令 ..\ms\test
結果: passed all tests 編繹成功。
配置開發環境,以 VS2008 為例:
1.工具->選項->項目和解決方案->VC++ 目錄 添加兩項:
1.下拉列表切換至 包含文件 增加路徑 為 OpenSSL解壓路徑下的 include 目錄。
2.下拉列表切換至 庫文件 增加路徑 為編繹後 outdll 目錄 或out32dll 目錄。
2.項目->屬性 對話框 , 配置屬性 -> 鏈接器 -> 命令行 添加 ssleay32.lib libeay32.lib 保存,也可取消該步驟,在代碼文件中引入
#pragma comment(lib, "ssleay32.lib")
#pragma comment(lib, "libeay32.lib")
完成後,即可進入下一步代碼調用 , 如果仍出現運行異常,嘗試 項目->屬性 對話框 , 配置屬性 -> C/C++ -> 代碼生成 運行庫 切換為 多線程 DLL (/MD) , 因為OPENSSL 默認編繹 選擇 /MD 模式。
補充一點,本人VS2008編繹 nmake -f ms\ntdll.mak 模式 代碼無法正常運行 , 切換到 nmake -f ms\nt.mak 方式編繹 恢復正常運行。
編繹之後 Debug 模式在XP環境運行異常,原因是 XP環境中沒有Debug 運行庫環境,切換Release方式編繹可運行。
VS2010 之前 DLL有 程序清單配置,這個在 VS2010之後取消了。有時不同的運行環境庫如VC90環境與VC100 不同編繹DLL混合運行會報錯,可參考靜態編繹。
檢查運行環境清單:
項目->屬性 對話框 , 配置屬性 -> 清單工具 -> 輸入和輸出 嵌入清單 選否 , 如此,下次編譯時,會生成同名的: .manifest 後綴文件。
為了避免不必要麻煩, 如果 VS2008 做為開發環境,就用 VS2008做為DLL編繹環境,同理 VS2010 一樣。