2

我编写下面的代码来测试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,但得到了相同的结果。

4

1 回答 1

5

您是使用talloc 作为单独的库还是将其编译到可执行文件中?如果您将它用作单独的库,则需要链接到它 - 通过添加-ltalloc到您的构建命令来猜测。

于 2012-11-02T13:10:28.393 回答