日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Android >内容正文

Android

Log4cplus 1.0.3 Android版本编译

發布時間:2024/10/12 Android 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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_HXX

6. 修改源代碼src/socket-unix.cxx

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

7. 如果需要編譯靜態庫,需要修改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版本编译的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。