0

我正在开发一个嵌入式项目,并且因为这个错误而努力编译它:
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

我已经-nostdlib在makefile中包含了标志......
提前谢谢你!

4

2 回答 2

1

您包含的事实-nostdlib是导致您的问题的原因。

如果您复制一个结构,编译器可能会调用标准 C 运行时函数memcpy()来执行此操作。如果你链接,-nostdlib那么你告诉链接器不包括标准 C 运行时库。

如果必须使用,-nostdlib则必须提供自己的memcpy().

于 2021-03-26T01:19:35.683 回答
1
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];
    }
}
于 2021-03-26T01:19:48.587 回答