我正在尝试在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的库时遇到问题,而且我不想搞乱库源。
答案 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.
};