尽管包含 "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
编译器标志可以解决它。
我正在尝试在 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
编译器标志可以解决它。