尽管包含 "string.h",但未定义对 'strnlen' 的引用

Undefined reference to 'strnlen' despite "string.h" include

我正在尝试在 LPCXpresso 上为 LPC1769 创建一个项目。我有一个 C 文件调用

#include <string.h>
int main()
{
    //some stuff
    strnlen(SomeString, someInt);
}

我得到一个错误:

Undefined reference to 'strnlen'

奇怪的是strcpy、strncpy或者其他常用的字符串函数都没有问题

我正在构建 Cortex-M3 处理器 使用的编译器是:arm-none-eabi-gcc 在 Eclipse 中,我勾选了 MCU 链接器选项:No startup or default libs 我是 运行 Eclipse Ubuntu

虽然仅使用 strlen 绕过它可能很容易,但实际上我在使用使用 strnlen 的库时遇到了问题,我不想弄乱库源。

你想要这个包括:

#include <string.h>

<>"" 的区别在于 <> 在您的系统包含文件夹中搜索头文件。 "" 在当前目录和 -I directory

指定的任何其他包含文件夹中搜索头文件

strnlen 函数(直到最近)是一个特定于 Linux 的函数(一些文档,例如 2011 年的 GNU libc manual still says that it is a "GNU extension"). The current manual page says it is part of POSIX.1-2008. Since you are cross-compiling, it is possible that the target machine's runtime library does not have this function. A forum posting 就是这么说的。

以下可能对您有用(因为 strnlen() 不是运行时库的一部分)。

定义 own/local 版本的 strnlen()

int strnlen(char *param, int maxlen)
{  
    // Perform appropriate string manipulation ... as needed.
    // Return what you need.
};  

我添加了同样的问题,我发现使用 -std=gnu++11 编译器标志可以解决它。