gpt4 book ai didi

c++ - undefined symbol -在centos 7中使用log4cxx

转载 作者:行者123 更新时间:2023-12-02 10:02:31 26 4
gpt4 key购买 nike

我很难使我的代码段在centos 7上运行。

因此,我在盒子上安装了以下软件包:

log4cxx.x86_64, log4cxx-devel.x86_64, apr.x86_64, apr-devel.x86_64, apr-util.x86_64, apr-util-devel.x86_64, glib2.x86_64, glib2-devel.x86_64



在CMakeList.txt中,我尝试了一堆组合(成功构建),但是在执行二进制文件时却得到了相同的结果。

目前,我有:
find_package(PkgConfig)
find_library(LOG4CXX_LIBRARY log4cxx)

尽管我很肯定它可以找到该库,但是我也尝试过:
-llog4cxx -lapr-1 -laprutil-1 -lexpat -lglib-2.0

我用两个配置来构建,当我运行可执行输出时,我将得到:
undefined symbol: _ZN7log4cxx3xml15DOMConfigurator9configureERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE

“nm”输出为:
$ nm -D /usr/lib64/liblog4cxx.so | grep _ZN7log4cxx3xml15DOMConfigurator9configure
00000000000f9ff0 T _ZN7log4cxx3xml15DOMConfigurator9configureERKSbIwSt11char_traitsIwESaIwEE
00000000000f9e40 T _ZN7log4cxx3xml15DOMConfigurator9configureERKSs

在我的.cpp文件中,我基本上使用了以下代码:
try {
log4cxx::xml::DOMConfigurator::configure("/root/1.xml");
}
catch (log4cxx::helpers::Exception&) {
fprintf( stderr, "Error on loading Log-config file" );
return -1;
}

ps:相同的项目可以编译并在FreeBSD 12上运行,没有问题。

最佳答案

这似乎是a C++ standard library ABI mismatch;不匹配的符号demangle为:

log4cxx::xml::DOMConfigurator::configure(std::basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t> > const&)
log4cxx::xml::DOMConfigurator::configure(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)

您的评论表明您正在C++ 17模式下使用GCC 10。 CentOS 7附带了更老的GCC 4.8.5(甚至不支持C++ 17),并且早于在GCC 5.1中将ABI更改为 std::basic_string(上面的第一个链接)。

您已安装的预构建库将由“默认” CentOS 7工具链构建。

乍一看,我建议您从源代码构建依赖关系,以便所有内容都使用相同的工具链构建。

某些黑客(例如 _GLIBCXX_USE_CXX11_ABI宏)可能会正确地将两者对齐,但是如果这样的话,您将需要其他人的帮助。

( char / wchar_t不匹配也很有趣,尽管我怀疑这只是基于出现错误的顺序的红色鲱鱼。)

关于c++ - undefined symbol -在centos 7中使用log4cxx,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61939865/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com