2012-04-14 8 views
3

私のCSクラスのMPで作業しています。私たちのコンピュータラボはLinux OSで動作していますが、自宅のコンピュータ(Mac OS X)でコードをコンパイルしようとしました。次のエラーが表示されます。アーキテクチャx86_64の未定義のシンボル:(Mac OS X 10.7)

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 

アイデアはありますか? tdestroyのGNUのmanページから

+0

リンクエラーはコンパイルしながら、一つ以上の必要なファイルを含めていない、を示しています。どのようにそれをコンパイルしていますか? –

+0

提供されているメイクファイル – Krzysiek

+0

はどこに定義されていますか? –

答えて

2

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

これは、この機能はOS X

EDITで使用できないことを意味します 含まれた後にこれを置く:

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

あなたはtwalk/tdelete/freeを使ってtdestroyを実装しようとすることができます - それは非常に難しいはずですが、それも空にしておくべきですOSXでメモリリークを食べた)。

EDIT 2:manページへの追加のリンク(キャメロンの10倍)

+0

ですので、修正はありません...? : – Krzysiek

+0

修正プログラムがあり、関数の独自の実装を作成するか、空のままにしておきます。元の応答を更新します。 – strkol

+0

[マニュアルページへのリンク](http://www.kernel.org/doc/参照用に – Cameron

関連する問題