我写下面的代码来测试talloc:
#include "talloc.h"
typedef struct linklist
{
char* str;
struct linklist* next;
}LinkList;
int main(int argc,char* argv[])
{
LinkList* lptr=talloc(NULL,LinkList);
lptr->str=talloc_strdup(lptr,"Test ptr");
talloc_free(lptr);
return 0;
}
但是出现编译错误:
talloctest.c:(.text+0x21): undefined reference to `talloc_named_const(void const*, unsigned int, char const*)'
talloctest.c:(.text+0x39): undefined reference to `talloc_strdup(void const*, char const*)'
talloctest.c:(.text+0x4d): undefined reference to `talloc_free(void*)'
collect2: ld returned 1 exit status
然后,我找到相对宏和函数的定义:
在“talloc.h”中的定义:
#define talloc(ctx, type) (type *)talloc_named_const(ctx, sizeof(type), #type)
char *talloc_strdup(const void *t, const char *p);
在“talloc.c”中的实现:
void *talloc_named_const(const void *context, size_t size, const char *name)
{
return _talloc_named_const(context, size, name);
}
char *talloc_strdup(const void *t, const char *p)
{
if (unlikely(!p)) return NULL;
return __talloc_strlendup(t, p, strlen(p));
}
有人可以告诉我为什么吗?我尝试了talloc-1.3.0和talloc-2.0.7,但是得到了相同的结果。
最佳答案
您是将talloc用作单独的库还是将其编译为可执行文件?如果您将其用作单独的库,则需要链接到它-可以通过在构建命令中添加-ltalloc
来猜测。
关于c - 使用talloc时发生编译错误,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13195838/