我正在尝试构建一个名为lipiTk的源代码
我有很多这样的错误:
Documents/lipi/lipi/src/reco/shaperec/activedtw/ActiveDTWShapeRecognizer.cpp:1222:78:
error: ‘strcasecmp’ was not declared in this scope
我该怎么办,代码中有太多的cpp文件会产生类似的错误。 我不认为我可以测试写入包含string.h到每个提供错误的cpp文件,问题可能与我的编译器有关吗?
我在Ubuntu,GCC是4.5。
我的sw配置高于lipitk需求,正如我在手册中所读到的那样。
答案 0 :(得分:10)
我认为它可能在做
#include <string>
如果将错误更改为
,则应修复错误#include <strings.h>
答案 1 :(得分:9)
我猜这里。 “strcasecmp”不是标准库函数,但是,它的名称遵循库函数的惯例,所以我想lipiTk最初是使用一些编译器编写的,它为它的运行时库添加了一堆非标准扩展(并声明了)它们在标准头文件中)
所以,我猜这个问题是你的编译器有一组不同的库扩展 - 或者类似的名称不同 - 谷歌告诉我“strcasecmp”做了一个不区分大小写的字符串比较,许多编译器称为“stricmp”或“strcmpi”或“_stricmp”。找出编译器使用的名称,然后在源文件的顶部添加#define:
#define strcasecmp _stricmp
答案 2 :(得分:5)
正如我之前在评论中提到的,strcasecmp不在C或C ++标准中。但是,它由POSIX.1-2001和4.4BSD定义。
假设您的系统符合POSIX或BSD,则必须包含正确的标题:
#include <strings.h>
答案 3 :(得分:0)
你需要包含该范围内可用函数的文件 - 世界上你如何获得如此多的代码而没有正确的包含(如果你不能把它放进去,我会假设很多每个文件一次。)
PS:你确定你的ubuntu版本在string.h中有这个功能吗?类型:
man strcasecmp
进入bash终端,查看它是否存在以及如何访问它。这可能会帮助您找到它至少假设您的代码是正确的,并且包含仅仅是移植或类似的东西。