我遇到了GCC编译器的一个神秘的情况。所以,我有以下文件:GCC:使用旧C代码时的链接器错误
//main.cpp
#include "mleak_cpp.h"
int main(int argc, char* argv[])
{
foo();
__memory_malloc(10,"hello",5);
return 0;
}
//mleak_cpp.h
......
void foo(void);
void* __memory_malloc(size_t size, const char* file, int line);
//mleak_cpp.cpp
//definitions of the functions;
void foo(void){printf("foo\n");
void* __memory_malloc(size_t size, const char* file, int line){
printf("%s,%d\n",file,line);
InitDoubleLinkList();
void* p = malloc(size);
if(p == NULL)
return NULL;
__DuLinkList* pListNode;
pListNode = (__DuLinkList*)malloc(sizeof(__DuLinkList));
pListNode->address = p;
pListNode->memorysize = size;
pListNode->file = file;
pListNode->line = line;
InsertBlockToList(pListNode);
return p;
}
对于某种原因,对void foo(void)的调用没有问题,但对“__memory_malloc”的调用却出现链接器错误,“undefined reference”等等。导致不同行为的两个函数之间有什么区别?
我尝试添加“外部C”到“的#include”指令,所以main.cpp中写道:
extern "C"{
#include "mleak_cpp.h"
}
和职能的声明之前添加关键字“外部”,而这一次调用“foo()”也会出现同样的错误。
我明白从你们那里
你应该发布确切的错误消息,而不是等等等等。 –