log4cpp编译测试

最近项目上讨论通过对log4cpp进行封装后实现写日志的功能,今天在开发环境中编译库和测试程序。过程中遇到两个问题,记录一下。

开发环境:ARMv8 64位环境,Ubuntu 18.04系统

1,log4cpp库编译,正常步骤:./configure,make(因使用动态库,没有进行安装)

但是有报错:

UNAME_MACHINE = aarch64
UNAME_RELEASE = 4.9.253-tegra
UNAME_SYSTEM = Linux
UNAME_VERSION = #0 SMP PREEMPT Tue Nov 30 15:41:10 CST 2021
configure: error: cannot guess build type; you must specify one

解决办法:./configure --build=arm-linux

2,编译测试程序时,最后链接时报错:

/usr/bin/ld: /tmp/cceCXV4A.o: undefined reference to symbol '_ZN7log4cpp8Appender29AppenderMapStorageInitializerC1Ev'
liblog4cpp.so.5: error adding symbols: DSO missing from command line
collect2: error: ld returned 1 exit status

查询了很久也没有找到解决办法,通过nm查看liblog4cpp.so.5库中是有这个符号的。

检查log4cpp的源码,是在Appender.hh中最后部分,AppenderMapStorageInitializer是Appender的一个子类,下面有个静态的成员变量。

网上也有这种报错的问题,但是都没有解决办法。这里记录一下最后的解决办法:

最后在链接测试程序时,将log4cpp依赖库显示链接,并放在封装库的前面。

g++ -std=c++11 test.cpp -o test -L. -llog4cpp -llog -lpthread -I.

感谢链接:https://www.jianshu.com/p/f11b558c4a3f

https://stackoverflow.com/questions/48185147/swig-tcl-undefined-symbol-error-for-log4cpp-wrapper  这里有讨论,但是没有解决办法

https://www.jianshu.com/p/c580e8732b67  这里只有问题记录,同样也没有解决办法

posted @ 2023-03-14 20:34  strongbug1  阅读(168)  评论(0编辑  收藏  举报