我正在尝试从x86_64机器为ARM交叉编译log4cxx。编译期间,出现错误'memmove' was not declared in this scope
。
我正在使用Linaro GCC交叉编译器版本4.9.4。为了防止交叉编译出现其他问题,我将CPPFLAGS=-DAPR_IOVEC_DEFINED
赋予configure命令。这是从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());
我知道“未声明”错误通常表示不包括带有声明的文件,但是似乎不太可能在已发布的代码中出现问题。
答案 0 :(得分:0)
此错误是由于缺少文件中的包含路径所致,尽管log4cxx Git存储库中的提交消息表明该错误仅在某些版本的GCC编译器中发生。
要解决该错误,请在src/main/cpp/inputstreamreader.cpp
中添加以下内容:
#include <cstdio>
#include <cstring>
这些包含项包含在{4} log4cxx Github存储库中的most recent version of the file中。自0.10.0版本以来,这些包含项的添加是对该文件的唯一非格式更改。在文件的commit history中,由于缺少这些内容,提到了GCC 4.3和4.4的问题。
我还遇到了来自log4cxx中其他文件的其他not declared
错误。它们可以以相同的方式修复,并且已在Github存储库中修复。