參考鏈接
http://blog.csdn.net/hnu_zxc/article/details/7786060
http://blog.chinaunix.net/uid-20384806-id-1954344.html
https://msdn.microsoft.com/en-us/library/aa379205
一 編譯環境
win7 x64 vs2012
二 下載類庫
1 從http://apr.apache.org/download.cgi下載apr, apr-util,apr-iconv(注意: 要下載windows平台的源碼)
apr-1.5.2-win32-src.zip
apr-util-1.5.4-win32-src.zip
apr-iconv-1.2.1-win32-src-r2.zip
2 從http://logging.apache.org/log4cxx/下載 log4cxx
apache-log4cxx-0.10.0.zip
3 從http://gnuwin32.sourceforge.net/packages/sed.htm 下載sed的windows版本(二進制程序,以及運行的依賴dll)
sed-4.2.1-bin.zip
sed-4.2.1-dep.zip
三 解壓縮
1 將第二步前兩步下載的4個壓縮包解壓到同一文件夾下, 外層文件夾名字任意, 內層apr, apr-util, apr-iconv這個三個類庫的文件夾需要修改成僅保留類庫名字的形式, log4cxx這個隨意
最后的目錄結果如下:
D:\log4cpp.compile(這個名字任意)\
|_ apr
|_ apr-iconv
|_ apr-util
|_ log4cxx(這個名字任意)
2 將sed的兩個壓縮包解壓, 內層相同的文件夾合並到一起, 然后將sed.exe所在的路徑添加到系統的環境變量下
四 編譯
1 從開始菜單進入vs2102的x64版本的命令行工具, 然后切換到上一步內層log4cxx目錄下, 依次執行configure.bat, configure-aprutil.bat進行前期的准備工作,如果沒有錯誤提示, 繼續往下看, 否則,檢查上面的步驟是否正確
2 打開log4cxx\projects 目錄下的log4cxx.dsw,按照提示升級項目, 不過這個升級有問題, 只是升級到vs2010版本的,so用vs2012打開項目后, 在解決方案管理器中的解決方案條目上右擊, 在出現的菜單中選擇升級項目, 這樣就把項目升級到vs2012版本的.(這個有點記不清楚了,大概是這樣),下面進入正式編譯環節(以編譯x64 Debug版本為例)
3 將編譯版本選擇成如下圖所示
然后點擊x64右邊的向下的箭頭,發現log4cxx這個工程並沒有配置x64版本的編譯選項
點擊win32右邊的三角符號, 在菜單中選擇新建,按下圖選擇
不要勾選"創建新的解決方案平台"前面的勾, 因為x64解決方案平台已經有了, 只是這個項目沒有x64位版本而已, 點擊確定回到配置管理器界面,把log4cxx那一行的生成那一列的勾打上,最后開始點擊"生成"菜單->生成解決方案.
4
<1> 剛開始編譯會出現類似於以下的錯誤:
apache-log4cxx-0.10.0\src\main\include\log4cxx\spi\loggingevent.h(155): error C2252:只能在命名空間范圍內顯式實例化模板' 錯誤.
解決方法:
a) 雙擊 "輸出" 窗口中的錯誤行, 此時會在 "代碼窗口" 中出現錯誤的位置.
b) 選擇 LOG4CXX_LIST_DEF, 按鍵盤 F12, 此時會跳轉到該宏的定義
c) 將
#define LOG4CXX_LIST_DEF(N, T) \
template class LOG4CXX_EXPORT std::allocator<T>; \
template class LOG4CXX_EXPORT std::vector<T>; \
typedef std::vector<T> N
替換為:
#define LOG4CXX_LIST_DEF(N, T) \
typedef std::vector<T> N
<2>改完后繼續編譯,會出現以下err
這個是因為沒有導入這個函數對應的導入庫"Rpcrt4.lib",在解決方案面板log4cxx項目點擊右鍵,選擇屬性,在配置屬性->鏈接器->輸入->附加依賴項中添加"Rpcrt4.lib" ,點擊確定后, 繼續編譯, 就可以在projects\Debug文件夾里看到log4cxx.lib 以及log4cxx.dll文件了