windows 下編譯log4cxx(x64)


參考鏈接

             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文件了


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM