首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在编译C++代码时修复一些版本控制问题?

如何在编译C++代码时修复一些版本控制问题?
EN

Stack Overflow用户
提问于 2012-03-27 02:29:08
回答 3查看 4.9K关注 0票数 2

我正在尝试在Linux上编译http://sourceforge.net/projects/desr/files/Release/desr-0.9.tgz/download上的文件。

当我运行./configure时,一切都很顺利,直到我输入make。然后我得到以下错误:

代码语言:javascript
复制
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++ --版本:

代码语言:javascript
复制
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.
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-03-27 02:53:08

如果有

代码语言:javascript
复制
 #include <cstring> 

g++编译器应该将它自己包含的声明放入std::和全局名称空间中。出于某种原因,它看起来好像并没有这样做。尝试用std::strcpy替换一个strcpy实例。

票数 4
EN

Stack Overflow用户

发布于 2012-06-28 09:35:25

我也遇到过类似的问题。在我的例子中,头文件的包含顺序如下

代码语言:javascript
复制
#include <string> // for string class
#include <cstring> // for memcpy()

这样一来,我就遇到了上面你在gcc 4.6.3版本中提到的错误。

切换包含的顺序起作用了..

票数 3
EN

Stack Overflow用户

发布于 2021-07-22 02:56:34

此问题的一个可能原因是您设法在某个名称空间块中获取了一个#include <cstring>

这会导致为include保护设置#define,阻止您在其他任何地方重新导入它,但同时将所有符号加载到您的命名空间中,而不是它们所属的全局范围中。

当我试图将内联模板定义与它们的声明放在一个单独的文件中时,我有时会犯这个错误。

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

https://stackoverflow.com/questions/9877635

复制
相关文章

相似问题

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