对 stricmp 的未定义引用

Posted

技术标签:

【中文标题】对 stricmp 的未定义引用【英文标题】:undefined reference to stricmp 【发布时间】:2011-08-20 14:16:03 【问题描述】:

我正在尝试创建一个在字符串中查找和替换字符串的方法,但在编译时我似乎遇到了一些错误。我可以得到一些帮助来弄清楚发生了什么吗?

void replaceString(char *find, char *replace)

    int len_string,i;
    char temp[30];
    len_string=strlen(find);
    while(1)
    
        for(i=0;i<len_string;i++) temp[i]=fgetc(edit);
            temp[i+1]=NULL;
        /* the stricmp() is used for comparing both string. */
        if(stricmp(find,temp)==0)
        
            fprintf(edit,"%s ",replace);
            fclose(edit);
            exit(1);
        
        fseek(edit,-(len_string-1),1);
           

我在编译时得到的错误是未定义的对 stricmp 的引用。 我知道这不是正确的编码约定,但编辑(文件类型的对象)当前是一个全局变量。

【问题讨论】:

【参考方案1】:

stricmp 是特定于 Windows 的。如果您不在 Windows 上,strcasecmp

【讨论】:

不仅特定于 Windows,而且特定于 Microsoft 的编译器/库。我认为您不会在其他 Windows 编译器中找到它。 Borland Turbo C 也提供了这个功能。 strncasecmp 也是strnicmp 的等效替代品。【参考方案2】:

实际上,错误是在链接时而不是在编译时。您的代码被编译为一个目标文件,期望在与它找不到的其他目标文件链接时找到 stricmp 的实现。因此出现错误:“未定义对 stricmp 的引用”。正如 bmargulies 指出的那样,该实现仅在 Windows 库中可用。如果您使用的是 POSIX 兼容系统,则可以切换到 strcasecmp()。

【讨论】:

以上是关于对 stricmp 的未定义引用的主要内容,如果未能解决你的问题,请参考以下文章

对静态成员的未定义引用

对现有类的未定义引用

显示对已定义对象的未定义引用

键入对 `cv::fastFree(void*)' 的未定义引用

对函数 Android NDK 的未定义引用

对“cvCreateBGCodeBookModel”的未定义引用