log4c移植到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环境变量。

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_645 //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

//#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目录下生产成指定架构的库文件。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值