8

我正在尝试在 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 链接器选项:没有启动或默认库我在 Ubuntu 上运行 Eclipse

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

4

4 回答 4

7

strnlen函数(直到最近)是特定于 Linux 的函数(一些文档,如 GNU libc 手册仍然说它是“GNU 扩展”)。当前的手册页说它是 POSIX.1-2008 的一部分。由于你是交叉编译,可能目标机的运行时库没有这个功能。2011 年的一个论坛帖子就是这么说的。

于 2015-05-13T00:45:02.630 回答
1

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

于 2017-01-06T10:15:21.750 回答
-1

您希望这包括:

#include <string.h>

<>和之间的区别在于""搜索<>系统包含文件夹中的头文件。在""当前目录和由指定的任何其他包含文件夹中搜索头文件-I directory

于 2015-05-13T00:20:12.680 回答
-1

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

定义您自己的/本地版本的strnlen().

int strnlen(char *param, int maxlen)
{  
    // Perform appropriate string manipulation ... as needed.
    // Return what you need.
};  
于 2015-05-13T00:57:03.373 回答