对“memcpy'”的未定义引用;由ld引起的错误
我正在开发一个嵌入式项目,但由于这个错误,我很难编译它:对“memcpy'”的未定义引用;由ld引起的错误,c,makefile,ld,memcpy,C,Makefile,Ld,Memcpy,我正在开发一个嵌入式项目,但由于这个错误,我很难编译它: mipsel-linux-gnu-ld:main.o:在函数“fooBar”中:main.c:(.text+0x3ec):未定义对“memcpy”的引用 此错误是由与此类似的每个操作引起的,在这些操作中,我将指针的值指定给非指针类型的变量 int a = 0; int *ap = &a; int c = *ap; //this causes the error 下面是另一个例子: state_t *exceptionStat
mipsel-linux-gnu-ld:main.o:在函数“fooBar”中:main.c:(.text+0x3ec):未定义对“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中包含了标志-nostlib
提前谢谢你 您包含了
-nostlib
这一事实是导致您出现问题的原因
如果复制结构,编译器可能会调用标准的C运行时函数memcpy()
。如果您使用-nostlib
链接,那么您告诉链接器不要包含标准的C运行时库
如果您必须使用
-nostlib
,那么您必须提供自己的memcpy()
实现,因为您包含了-nostlib
如果复制结构,编译器可能会调用标准的C运行时函数memcpy()
。如果您使用-nostlib
链接,那么您告诉链接器不要包含标准的C运行时库
如果必须使用-nostlib
,则必须提供自己的memcpy()
实现
把那面旗拿出来。它阻止与标准库调用的链接。编译器实际上可能会生成对memcpy函数的引用,即使您的代码没有显式调用它
如果您确实需要-nostlib
,我想您可以定义自己版本的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];
}
}
void*memcpy(void*dest,const void*src,size\u t n)
{
对于(大小i=0;i
把那面旗拿出来。它阻止与标准库调用的链接。编译器实际上可能会生成对memcpy函数的引用,即使您的代码没有显式调用它
如果您确实需要-nostlib
,我想您可以定义自己版本的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];
}
}
void*memcpy(void*dest,const void*src,size\u t n)
{
对于(大小i=0;i
非常感谢您的回答。不幸的是,我需要使用-nostlib标志,因为我的教授要求我使用它,而且因为我的程序需要在不能使用std库的嵌入式系统中运行。。。而类型size\u t只包含在stdlib中(或者我遗漏了什么吗?),结果是size\u t只是一个无符号int,现在代码可以工作了,谢谢你非常有用的回答size\u t
不是unsigned int
。它是unsigned long
或unsigned long
取决于您的CPU类型。非常感谢您的回答。不幸的是,我需要使用-nostlib标志,因为我的教授要求我使用它,而且因为我的程序需要在不能使用std库的嵌入式系统中运行。。。而类型size\u t只包含在stdlib中(或者我遗漏了什么吗?),结果是size\u t只是一个无符号int,现在代码可以工作了,谢谢你非常有用的回答size\u t
不是unsigned int
。它是unsigned long
或unsigned long
取决于您拥有的CPU类型。