undefined reference to `memcpy' 由 ld 引起的错误
undefined reference to `memcpy' error caused by ld
我正在开发一个嵌入式项目,由于这个错误而难以编译它:
mipsel-linux-gnu-ld: main.o: in function 'fooBar':main.c:(.text+0x3ec): undefined reference to 'memcpy'
每次类似这样的操作都会导致这个错误,其中我将指针的值赋给了一个非指针类型的变量。
int a = 0;
int *ap = &a;
int c = *ap; //this causes the error
这是另一个例子:
state_t *exceptionState = (unsigned int) 0x0FFFF000;
currentProcess->cpu_state = *excepetionState; //this causes the error
我已经在 makefile 中包含了标志 -nostdlib
...
提前致谢!
您包含 -nostdlib
的事实是导致您出现问题的原因。
如果您复制结构,编译器可能会调用标准 C 运行时函数 memcpy()
来执行此操作。如果您 link 和 -nostdlib
那么您是在告诉 link 用户不要包含标准 C 运行时库。
如果您必须使用 -nostdlib
,那么您必须提供自己的 memcpy()
实现。
I have already included the flag -nostdlib in the makefile...
拿掉那面旗帜。它阻止链接到标准库调用。编译器实际上可能会生成对 memcpy 函数的引用,即使您的代码没有显式调用它。
如果您绝对需要 -nostdlib
,我想您可以定义自己的 memcpy
版本 - 如果这是链接器抱怨的唯一功能。它不会像优化的那样,但它会工作。将以下代码添加到您的源文件之一的底部:
void *memcpy(void *dest, const void *src, size_t n)
{
for (size_t i = 0; i < n; i++)
{
((char*)dest)[i] = ((char*)src)[i];
}
}
我正在开发一个嵌入式项目,由于这个错误而难以编译它:
mipsel-linux-gnu-ld: main.o: in function 'fooBar':main.c:(.text+0x3ec): undefined reference to 'memcpy'
每次类似这样的操作都会导致这个错误,其中我将指针的值赋给了一个非指针类型的变量。
int a = 0;
int *ap = &a;
int c = *ap; //this causes the error
这是另一个例子:
state_t *exceptionState = (unsigned int) 0x0FFFF000;
currentProcess->cpu_state = *excepetionState; //this causes the error
我已经在 makefile 中包含了标志 -nostdlib
...
提前致谢!
您包含 -nostdlib
的事实是导致您出现问题的原因。
如果您复制结构,编译器可能会调用标准 C 运行时函数 memcpy()
来执行此操作。如果您 link 和 -nostdlib
那么您是在告诉 link 用户不要包含标准 C 运行时库。
如果您必须使用 -nostdlib
,那么您必须提供自己的 memcpy()
实现。
I have already included the flag -nostdlib in the makefile...
拿掉那面旗帜。它阻止链接到标准库调用。编译器实际上可能会生成对 memcpy 函数的引用,即使您的代码没有显式调用它。
如果您绝对需要 -nostdlib
,我想您可以定义自己的 memcpy
版本 - 如果这是链接器抱怨的唯一功能。它不会像优化的那样,但它会工作。将以下代码添加到您的源文件之一的底部:
void *memcpy(void *dest, const void *src, size_t n)
{
for (size_t i = 0; i < n; i++)
{
((char*)dest)[i] = ((char*)src)[i];
}
}