最近项目上讨论通过对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 这里只有问题记录,同样也没有解决办法
标签:解决办法,测试程序,编译,测试,error,com,log4cpp From: https://www.cnblogs.com/strongbug/p/17216272.html