windows 下編譯log4cxx(x64)

來源:互聯網
上載者:User

標籤:

參考連結

             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檔案了

windows 下編譯log4cxx(x64)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.