x86_64架构的未定义符号:(Mac OS X 10.7)

4

我正在为我的计算机科学课程开发一个 MP。我们的计算机实验室使用 Linux 操作系统,但我尝试在家里的电脑(Mac OS X)上编译代码时出现以下错误:

Undefined symbols for architecture x86_64:
"_tdestroy", referenced from:
_dictionary_destroy in libdictionary.o
_dictionary_destroy_free in libdictionary.o
ld: symbol(s) not found for architecture x86_64

我曾试图在网上找到解决方案,但没有成功。 我们在Makefile中使用以下宏:

CC = gcc
INC = -I.
FLAGS = -g -W -Wall
LIBS = -lpthread

有什么想法吗?


链接错误表示在编译时未包含一个或多个必需的文件。您是如何进行编译的? - P.P
仅使用提供的Makefile进行编程。 - Krzysiek
它来自<search.h>。 - Krzysiek
1个回答

2

以下内容来自tdestroy的GNU man页面:

SVr4, POSIX.1-2001. The function tdestroy() is a GNU extension

这意味着该函数在OS X上不可用。

编辑: 在包含文件后添加以下内容:

#ifndef _GNU_SOURCE
void tdestroy(void *root, void (*free_node)(void *nodep)) { }
#endif

您可以尝试使用twalk/tdelete/free来实现tdestroy-这应该不难做到,但是将其保留为空也可以(但在OSX上会创建内存泄漏)。
编辑2:添加了man页面的链接(感谢Cameron)。

有一个解决方法,就是创建自己的函数实现或者将函数体留空。我会更新原始答案。 - strkol
参考以下链接的手册页面:http://www.kernel.org/doc/man-pages/online/pages/man3/tsearch.3.html - Cameron
现在它已经编译成功了!非常感谢!:D 我不打算使用tdestroy,因此不需要实现! - Krzysiek

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接