首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >编写自定义log4cxx策略时,链接器找不到log4cxx::helper::Object::cast

编写自定义log4cxx策略时,链接器找不到log4cxx::helper::Object::cast
EN

Stack Overflow用户
提问于 2022-08-09 15:25:05
回答 1查看 35关注 0票数 0

我使用的是log4cxx 0.10.0,我需要每小时或当文件大小太大时翻滚。我最初的尝试是将rollingPolicy配置为TimeBasedRollingPolicy,将triggerPolicy配置为SizeBasedTriggeringPolicy;但这是行不通的,因为TBRP也是一种触发策略。因此,我编写了一个SizeAndTimePolicy类,它继承自TriggeringPolicy和RollingPolicy,包含TBRP和SBTP,并委托给它们。它会编译,但是在链接时我会得到以下错误消息:

/opt/rh/devtoolset-9/root/usr/libexec/gcc/x86_64-redhat-linux/9/ld: util/libutil_lib.a(CustomLogPolicies.cpp.o):函数log4cxx::rolling::SizeAndTimePolicy::cast(log4cxx::helpers::Class const&) const': /home/jstracke/git/scidb/include/util/CustomLogPolicies.h:23: undefined reference tolog4cxx::helpers::Object::cast(log4cxx::helpers::Class const&)

当然,nm /usr/lib64 64/liblog4cxx.so.10.0.0上的-D没有找到那个符号。它发现的最近的是_ZNK7log4cxx7helpers10ObjectPtrTINS0_6ObjectEE4castERKNS0_5ClassE.

它所指的行是LOG4CXX_CAST_ENTRY_CHAIN(RollingPolicy)。有趣的是,它没有抱怨前一行,即LOG4CXX_CAST_ENTRY_CHAIN(TriggeringPolicy)。

我已经检查了我的链接行,以确保-llog4cxx在CustomLogPolicies.cpp.o之后。

我使用的是CentOS 7(这就是为什么我被困在log4cxx 0.10.0上)。而且,是的,C7是古老的,但是我们还不能完全摆脱它。我们正接近一个更现代的发行版,但我们可能还需要更长时间支持C7。

任何帮助都将不胜感激。

(编辑后添加:我已经构建了0.13.0,它给了我同样的问题。)

EN

回答 1

Stack Overflow用户

发布于 2022-08-10 16:02:17

我找到了一个解决办法,但我不喜欢它:我编辑了log4cxx 0.13.0以给Object::cast()一个实现,而不是纯虚拟的,并创建了一个包含它的object.cpp文件。我还将虚拟析构函数放在该文件中;它以前是内联的,但工作不太好,因为包含虚拟析构函数的文件就是包含vtable的文件。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73294330

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档