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環境變量。
2. 下載log4cplus-1.1.1版本(下載地址),log4cplus-1.0.3(下載地址)
下載1.1.1版本的目的是獲取該版本提供的Android編譯腳本,方便編譯。
3. 解壓log4cplus-1.0.3目錄;解壓log4cplus-1.1.1目錄,查看目錄結構后,可以看到android子目錄,將android整個目錄拷貝到1.0.3版本同級目錄下。
4. 修改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()5. 生成頭文件?log4cplus-1.0.3\include\log4cplus\config\defines.hxx,該頭文件通過在linux環境運行./configure自動生成(主要是定義一些宏),這里直接貼出生成的代碼。
/* include/log4cplus/config/defines.hxx. Generated from defines.hxx.in by configure. */ #ifndef LOG4CPLUS_CONFIG_DEFINES_HXX #define LOG4CPLUS_CONFIG_DEFINES_HXX/* */ #define LOG4CPLUS_HAVE_SYSLOG_H 1/* */ #define LOG4CPLUS_HAVE_NETINET_IN_H 1/* */ #define LOG4CPLUS_HAVE_FTIME 1/* */ #define LOG4CPLUS_HAVE_GETTIMEOFDAY 1/* */ #define LOG4CPLUS_HAVE_GMTIME_R 1/* */ #define LOG4CPLUS_HAVE_HTONL 1/* */ #define LOG4CPLUS_HAVE_HTONS 1/* */ #define LOG4CPLUS_HAVE_LOCALTIME_R 1/* */ #define LOG4CPLUS_HAVE_LSTAT 1/* */ #define LOG4CPLUS_HAVE_NTOHL 1/* */ #define LOG4CPLUS_HAVE_NTOHS 1/* */ #define LOG4CPLUS_HAVE_STAT 1/* Define if this is a single-threaded library. */ /* #undef LOG4CPLUS_SINGLE_THREADED *//* */ /* #undef LOG4CPLUS_USE_PTHREADS *//* Define for compilers/standard libraries that support more than just the "C"locale. */ /* #undef LOG4CPLUS_WORKING_LOCALE *//* Define to int if undefined. */ /* #undef socklen_t *//* Defined for --enable-debugging builds. */ /* #undef LOG4CPLUS_DEBUGGING *//* Defined if the compiler understands __declspec(export) or __attribute__((export)) construct. */ #define LOG4CPLUS_DECLSPEC_EXPORT __attribute__ ((visibility("default")))/* Defined if the compiler understands __declspec(import) or __attribute__((import)) construct. */ #define LOG4CPLUS_DECLSPEC_IMPORT /**/#endif // LOG4CPLUS_CONFIG_DEFINES_HXX6. 修改源代碼src/socket-unix.cxx
//去除if條件,ndk需要該頭文件,當然也可以預定義宏 //#if defined(__APPLE__) || defined(__FreeBSD__) || defined(__NetBSD__) || defined(__hpux__) || defined (__CYGWIN__) #include <netinet/in.h> //#endif7. 如果需要編譯靜態庫,需要修改CMakeLists.txt文件
#編譯靜態庫文件.a #add_library (log4cplus STATIC ${log4cplus_all_sources})#編譯動態庫文件.so add_library (log4cplus SHARED ${log4cplus_all_sources})8. 打開命令行,進入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"9. 執行命令:
cmake.exe --build .編譯成功后,會在libs目錄下生產成指定架構的庫文件。
?
轉載于:https://www.cnblogs.com/huang9527/p/10202051.html
總結
以上是生活随笔為你收集整理的Log4cplus 1.0.3 Android版本编译的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 移动社交App“米聊”正式关停 曾是微信
- 下一篇: android sina oauth2.