網絡上找了一圈,結果都是經過修改代碼來編譯,作爲強迫症患者接受不了這種修改代碼卻沒法預知代碼帶來影響的方式,並且沒有靜態編譯的方法,爲了方便其餘人後續不在走彎路,提供本身的編譯方法。html
雖然最終的目的是相同,可是風險卻不一樣,每每風險倒是最致命的,就算只是一個機率很低的風險。c++
進入主題,須要準備的東西:
一、windows的操做系統,這個沒有的話你能夠不用看了,下面的不適合你。apache
二、vs2013,固然你不想用2013的話,後面的方法只是參考,不能確保會有其餘問題。固然你和我同樣有強迫症,恭喜你,你能夠對着來折騰。windows
三、log4cxx源碼,傳送門:http://logging.apache.org/log4cxx/download.html 網絡
四、log4cxx依賴的apache的組件apr和apr-util,傳送門:http://apr.apache.org/download.cgi工具
操做步驟:
一、將3個壓縮包(log4cxx、apr、apr-util)解壓到同一個目錄,建議目錄不要使用中文,未測試(可是中文路徑一直是開發人員的痛);測試
二、將apr-XX.XX.XX重命名爲apr, 將apr-util-XX.XX.XX 重命名爲 apr-utilspa
三、執行apache-log4cxx-0.10.0目錄下的configure.bat,目前log4cxx的版本已經在幾年前就中止在0.10.0了,不排除後面會更新,別認死理。操作系統
四、修改apr-util\include\apr_ldap.hw的APR_HAS_LDAP宏定義爲0,修改apr-util\include\apu.hw的APU_HAVE_APR_ICONV宏定義爲0,此步由於windows上沒有sed命令的支持,直接執行log4cxx目錄下的configure-aprutil.bat會無效。不過好在configure-aprutil.bat作的事情簡單,咱們就手動代替。不然只能裝sed for windows工具了。htm
五、打開apache-log4cxx-0.10.0\projects目錄下的log4cxx.dsw,轉換爲目標編譯器的項目,並設置log4cxx爲啓動項目
六、修改log4cxx的屬性,c++預處理器定義刪除LOG4CXX增長LOG4CXX_STATIC,配置類型爲靜態庫,加入附加依賴項:ws2_32.lib wsock32.lib rpcrt4.lib,不修改預處理器定義會報宏定義的錯誤,網上我能找到的資料都是直接修改宏定義來完成,不過我經過閱讀相關代碼發現log4cxx提供了編譯宏來處理,因此此處選擇修改預處理器定義而不是修改代碼;而要編譯成靜態庫,就須要把依賴的windows的庫靜態連接。
七、修改apr和aprutil的屬性,目標文件名由$(ProjectName)改成$(ProjectName)-1,此處網上的資料中不曾說起,卻在我編譯的時候一直報找不到連接對象,經過分析發現是生成的文件名配置跟生成的實際文件不一致致使,此處未在vs2003和vs2010上測試,有多是vs2013的規則更嚴格致使。
八、選擇Release編譯便可。
若是有更好的方法,歡迎分享,以上我的看法,歡迎拍磚,已自備鋼盔。
若是有不明白的地方歡迎溝通交流,若是須要轉載,麻煩標註來源。