我正在尝试在 Linux 上编译文件 http://sourceforge.net/projects/desr/files/Release/desr-0.9.tgz/download .
当我运行 ./configure 时,一切正常,直到我输入 make。 然后我得到以下错误:
In file included from ./string.h:33,
from HtmlTokenizer.cpp:24:
/usr/include/c++/4.4/cstring:76: error: ‘::memchr’ has not been declared
/usr/include/c++/4.4/cstring:77: error: ‘::memcmp’ has not been declared
/usr/include/c++/4.4/cstring:78: error: ‘::memcpy’ has not been declared
/usr/include/c++/4.4/cstring:79: error: ‘::memmove’ has not been declared
/usr/include/c++/4.4/cstring:80: error: ‘::memset’ has not been declared
/usr/include/c++/4.4/cstring:81: error: ‘::strcat’ has not been declared
/usr/include/c++/4.4/cstring:82: error: ‘::strcmp’ has not been declared
/usr/include/c++/4.4/cstring:83: error: ‘::strcoll’ has not been declared
/usr/include/c++/4.4/cstring:84: error: ‘::strcpy’ has not been declared
/usr/include/c++/4.4/cstring:85: error: ‘::strcspn’ has not been declared
/usr/include/c++/4.4/cstring:86: error: ‘::strerror’ has not been declared
/usr/include/c++/4.4/cstring:87: error: ‘::strlen’ has not been declared
/usr/include/c++/4.4/cstring:88: error: ‘::strncat’ has not been declared
/usr/include/c++/4.4/cstring:89: error: ‘::strncmp’ has not been declared
/usr/include/c++/4.4/cstring:90: error: ‘::strncpy’ has not been declared
/usr/include/c++/4.4/cstring:91: error: ‘::strspn’ has not been declared
/usr/include/c++/4.4/cstring:92: error: ‘::strtok’ has not been declared
/usr/include/c++/4.4/cstring:93: error: ‘::strxfrm’ has not been declared
/usr/include/c++/4.4/cstring:94: error: ‘::strchr’ has not been declared
/usr/include/c++/4.4/cstring:95: error: ‘::strpbrk’ has not been declared
/usr/include/c++/4.4/cstring:96: error: ‘::strrchr’ has not been declared
/usr/include/c++/4.4/cstring:97: error: ‘::strstr’ has not been declared
任何想法可能是什么问题?
这里是 g++ --version:
g++ (Ubuntu 4.4.3-4ubuntu5.1) 4.4.3
Copyright (C) 2009 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
有的时候
#include <cstring>
g++ 编译器应该将它自己包含的声明放入 std:: 和全局命名空间中。由于某种原因,它看起来好像没有那样做。尝试用 std::strcpy 替换一个 strcpy 实例。
我遇到了类似的问题。在我的例子中,头文件包含的顺序如下
#include <string> // for string class
#include <cstring> // for memcpy()
有了这个,我遇到了你在 gcc 4.6.3 中提到的上述错误。
切换包含工作的顺序..
这个问题的一个可能原因是你已经设法在某个地方得到一个命名空间块内的
#include <cstring>
。
这导致为 include guard 设置
#define
,阻止您在其他任何地方重新导入它,但同时将所有符号加载到您的命名空间中,而不是加载到它们所属的全局范围中。
当我试图将内联模板定义放在与其声明不同的文件中时,有时会犯这个错误。
即使这个问题很老,我也会添加到@Daniels 的答案中。 对我来说,错误是由于在源文件中包含
<cstring>
在具有类定义的标头之后未以 ;
. 终止而引起的