未明确引用' strnlen'尽管" string.h"包括

时间:2015-05-13 00:17:29

标签: c eclipse gcc arm lpc

我正在尝试在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 个答案:

答案 0 :(得分:4)

strnlen函数是(直到最近)一个特定于Linux的函数(某些文档,如GNU libc manual仍然说它是“GNU扩展”)。当前manual page表示它是POSIX.1-2008的一部分。由于您是交叉编译的,因此目标机器的运行时库可能没有此功能。 2011年的一个forum posting就是这样说的。

答案 1 :(得分:1)

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

答案 2 :(得分:0)

你想要这个包括:

#include <string.h>

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

答案 3 :(得分:0)

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

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

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