嵌入式Linux下log4cxx移植步骤与问题解决
"这篇文档主要讨论了如何将log4cxx日志系统移植到嵌入式Linux环境中的步骤,包括在移植过程中可能遇到的问题和解决方案。文章提到了在2010年前后,需要针对特定的硬件平台(如ARM)进行编译,并提供了编译apr(Apache Portable Runtime)和apr-util的配置示例。" 在嵌入式开发领域,日志系统对于调试和故障排查至关重要。log4cxx是Apache软件基金会的一个项目,它为C++开发者提供了一个功能强大的日志框架,类似于Java中的log4j。这个框架允许程序员在代码中方便地插入日志语句,以收集运行时信息,帮助分析和优化程序性能。在将log4cxx移植到嵌入式Linux系统时,需要注意以下几点关键知识点: 1. **硬件平台兼容性**:log4cxx最初设计用于桌面环境,但在嵌入式设备上使用时需要考虑硬件平台的差异,例如本文中提到的ARM架构。这通常涉及到交叉编译,即在宿主机上使用特定于目标平台的编译器来生成代码。 2. **交叉编译**:为了在非标准平台上构建log4cxx,需要使用交叉编译工具链,例如`arm-none-linux-gnueabi-gcc`和`arm-none-linux-gnueabi-g++`,这些工具链将生成适用于ARM处理器的二进制代码。 3. **依赖库的移植**:log4cxx依赖于apr和apr-util库,这两个库也需要进行相应的交叉编译和配置。在配置时,需要指定适当的参数,例如禁用动态库(`--disable-shared`),启用静态库(`--enable-static`),并设置安装路径(`--prefix`),以适应嵌入式系统的存储限制和运行环境。 4. **配置选项**:在编译apr和apr-util时,可以看到一些特定的配置选项,例如`--host=arm-linux`,表明编译的目标是ARM架构的Linux系统。此外,还有针对某些函数或特性的配置检查,如`ac_cv_func_setpgrp_void=yes`等,这些都是为了确保库在目标平台上正确工作。 5. **第三方库的排除**:在编译apr-util时,可以看到`--without-pgsql`、`--without-sqlite2`和`--without-sqlite3`等选项,这意味着在嵌入式环境中,可能不支持或不需要这些数据库接口,因此在编译时进行了排除。 6. **编译步骤**:移植log4cxx时,首先需要编译并安装apr,然后使用已安装的apr来编译apr-util,最后再编译log4cxx。确保每个步骤都成功执行,且所有依赖项都已正确安装。 7. **内存泄漏问题**:在文档中提到了log4cxx可能存在内存泄漏的问题,这可能是由于特定版本的bug或者特定环境下的使用方式导致的。解决这个问题可能需要对源代码进行调试,找出泄漏原因,并进行修复或寻找替代方案。 8. **日志级别与输出**:log4cxx允许设置不同的日志级别,如DEBUG、INFO、WARN、ERROR和FATAL,开发者可以根据需要调整这些级别,控制日志的输出量和详细程度。 9. **日志目的地**:log4cxx支持将日志输出到控制台、文件、网络、数据库等多种目的地,这在嵌入式系统中特别有用,因为可以灵活地根据系统需求选择合适的日志存储方式。 10. **性能优化**:在嵌入式环境中,资源有限,因此优化日志系统以降低性能开销是很重要的。log4cxx提供了各种性能优化策略,如过滤不必要的日志输出,减少I/O操作等。 通过以上步骤和注意事项,开发者可以成功地将log4cxx移植到嵌入式Linux系统,从而在有限的资源环境下实现有效的日志记录和管理系统。
的问题。基本上都是2010年前的。所以尝试移植一个最新的log4cxx 到板子上.
主要的参考资料是这个:
http://wiki.ros.org/gumros
其中的参数非常准确,但是给的apr以及apr-util两个联接失效了,所以到apache官网下载了一下。
其中的log4cxx是好用的,直接用这个就可以了。然后照着文档提示做就成功了。
移植过程记录如下:
1)apr-1.4.6
./configure CC=arm-none-linux-gnueabi-gcc CXX=arm-none-linux-gnueabi-g++ LD=arm-none-linux-gnueabi-ld --prefix=/home/developer2/works/dm8168/Dep/apr/ --disable-shared --enable-static --host=arm-linux ac_cv_file__dev_zero=yes ac_cv_func_setpgrp_void=yes apr_cv_tcp_nodelay_with_cork=no apr_cv_process_shared_works=no apr_cv_mutex_robust_shared=no ac_cv_sizeof_struct_iovec=8 apr_cv_mutex_recursive=yes
2)apr-util-1.4.1
./configure CC=arm-none-linux-gnueabi-gcc CXX=arm-none-linux-gnueabi-g++ LD=arm-none-linux-gnueabi-ld --prefix=/home/developer2/works/dm8168/Dep/apr-util --disable-shared --enable-static --host=arm-linux --without-pgsql --without-sqlite2 --without-sqlite3 --with-apr=/home/developer2/works/dm8168/Dep/apr --with-expat=builtin ac_cv_file__dev_zero=yes ac_cv_func_setpgrp_void=yes apr_cv_tcp_nodelay_with_cork=no apr_cv_process_shared_works=no apr_cv_mutex_robust_shared=no ac_cv_sizeof_struct_iovec=8
3)log4cxx
./configure CC=arm-none-linux-gnueabi-gcc CXX=arm-none-linux-gnueabi-g++ LD=arm-none-linux-gnueabi-ld --prefix=/home/developer2/works/dm8168/Dep/log4cxx --host=arm-linux --with-apr=/home/developer2/works/dm8168/Dep/apr --with-apr-util=/home/developer2/works/dm8168/Dep/apr-util ac_cv_file__dev_zero=yes ac_cv_func_setpgrp_void=yes apr_cv_tcp_nodelay_with_cork=no apr_cv_process_shared_works=no apr_cv_mutex_robust_shared=no ac_cv_sizeof_struct_iovec=8
make,make install 就搞定了。
最新的log4cxx代码在这里
http://logging.apache.org/log4cxx/download.html
依赖的库在这里:
http://apr.apache.org/download.cgi
https://archive.apache.org/dist/apr/
版本选择:apr-1.4.6, apr-util-1.4.1.tar.gz
下载后可阅读完整内容,剩余1页未读,立即下载
- 粉丝: 1
- 资源: 49
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- C++标准程序库:权威指南
- Java解惑:奇数判断误区与改进方法
- C++编程必读:20种设计模式详解与实战
- LM3S8962微控制器数据手册
- 51单片机C语言实战教程:从入门到精通
- Spring3.0权威指南:JavaEE6实战
- Win32多线程程序设计详解
- Lucene2.9.1开发全攻略:从环境配置到索引创建
- 内存虚拟硬盘技术:提升电脑速度的秘密武器
- Java操作数据库:保存与显示图片到数据库及页面
- ISO14001:2004环境管理体系要求详解
- ShopExV4.8二次开发详解
- 企业形象与产品推广一站式网站建设技术方案揭秘
- Shopex二次开发:触发器与控制器重定向技术详解
- FPGA开发实战指南:创新设计与进阶技巧
- ShopExV4.8二次开发入门:解决升级问题与功能扩展