1. 程式人生 > >Log4cplus 1.0.3 Android版本編譯

Log4cplus 1.0.3 Android版本編譯

在Android上使用so庫時需要記錄日誌,當然可以直接通過C/C++檔案操作進行,也可以使用成熟的日誌庫來完成。

Log4cplus是C/C++跨平臺庫,效能、程式碼可讀性尚可,決定採用。

選用版本1.0.3 自帶VC2008 編譯工程檔案,但並未提供Android編譯方式。下面提供編譯Android版本的方法。

1. 安裝Cmake設定環境變數(使用cmake編譯),下載android-ndk-r10e-windows-x86_64,設定ANDROID_NDK環境變數。

1. 下載log4cplus-1.1.1版本(下載地址),log4cplus-1.0.3(下載地址)

下載1.1.1版本的目的是獲取該版本提供的Android編譯指令碼,方便編譯。

2. 解壓log4cplus-1.0.3目錄;解壓log4cplus-1.1.1目錄,檢視目錄結構後,可以看到android子目錄,將android整個目錄拷貝到1.0.3版本同級目錄下。

3. 修改android目錄下android.toolchain.cmake檔案(對於64位系統)

 1 if( CMAKE_HOST_APPLE )
 2  set( ANDROID_NDK_HOST_SYSTEM_NAME "darwin-x86" )
 3 elseif( CMAKE_HOST_WIN32 )
 4  //64位系統需要設定windows-x86_64
 5  //set( ANDROID_NDK_HOST_SYSTEM_NAME "windows" )
6 set( ANDROID_NDK_HOST_SYSTEM_NAME "windows-x86_64" ) 7 set( TOOL_OS_SUFFIX ".exe" ) 8 elseif( CMAKE_HOST_UNIX ) 9 set( ANDROID_NDK_HOST_SYSTEM_NAME "linux-x86" ) 10 else() 11 message( FATAL_ERROR "Cross-compilation on your platform is not supported by this cmake toolchain" ) 12 endif()

因為log4cplus使用了異常,如果Android使用stlport的話,需要啟用異常

  if( NOT ANDROID_NDK_RELEASE STRLESS "r8d" )
   set( ANDROID_EXCEPTIONS       ON )
  else()
   //啟用異常
   //set( ANDROID_EXCEPTIONS       OFF )
   set( ANDROID_EXCEPTIONS       ON )
  endif()
  if( ANDROID_NDK_RELEASE STRLESS "r7" )
   set( ANDROID_RTTI            OFF )
  else()
   set( ANDROID_RTTI            ON )
  endif()

4. 修改原始碼src/socket-unix.cxx

//去除if條件,ndk需要該標頭檔案,當然也可以預定義巨集
//#if defined(__APPLE__) || defined(__FreeBSD__) || defined(__NetBSD__) || defined(__hpux__) || defined (__CYGWIN__)
#include <netinet/in.h>
//#endif

5. 如果需要編譯靜態庫,需要修改CMakeLists.txt檔案

#編譯靜態庫檔案.a
#add_library (log4cplus STATIC ${log4cplus_all_sources})

#編譯動態庫檔案.so
add_library (log4cplus SHARED ${log4cplus_all_sources})

6. 開啟命令列,進入log4cplus-1.0.3目錄下,執行命令:

cmake.exe -G"MinGW Makefiles" 
//指定stlport庫,與Application.mk保持一致,cmakelist檔案需要開啟異常
-DANDROID_STL=stlport_static  
-DANDROID_NATIVE_API_LEVEL=android-9 
-DCMAKE_TOOLCHAIN_FILE="全路徑\log4cplus-1.0.3\android\android.toolchain.cmake" 
-DCMAKE_MAKE_PROGRAM="%ANDROID_NDK%\prebuilt\windows-x86_64\bin\make.exe"

7. 執行命令:

cmake.exe --build .

編譯成功後,會在libs目錄下生產成指定架構的庫檔案。