如何修复 log4cxx 中的 'memmove' not declared 错误

How to fix 'memmove' not declared error in log4cxx

我正在尝试从 x86_64 机器交叉编译 ARM 的 log4cxx。在编译过程中,出现 'memmove' was not declared in this scope.

错误

我使用的是 Linaro GCC 交叉编译器 4.9.4 版。为了防止交叉编译出现不同的问题,我给配置命令 CPPFLAGS=-DAPR_IOVEC_DEFINED 。这是从 Apache Logging Services website.

下载的 log4cxx 源代码的 0.10.0 版

完整的错误信息如下:

inputstreamreader.cpp:66:64: error: 'memmove' was not declared in this scope
              memmove(buf.data(), buf.current(), buf.remaining());

我知道 "not declared" 错误通常表示未包含带有声明的文件,但这似乎不太可能成为已发布代码中的问题。

此错误是由于文件中缺少包含路径,尽管 log4cxx Git 存储库中的提交消息表明该错误仅发生在某些版本的 GCC 编译器中。

要修复错误,请将以下内容添加到 src/main/cpp/inputstreamreader.cpp

#include <cstdio>
#include <cstring>

这些包含文件存在于文件的 most recent version of the file, found on the log4cxx Github repo. The addition of those includes is the only non-formatting change to the file since version 0.10.0. In the commit history 中,由于缺少这些包含文件,提到了 GCC 4.3 和 4.4 的问题。

我还遇到了来自 log4cxx 中其他文件的其他 not declared 错误。它们可以以相同的方式修复,并已在 Github 存储库中修复。