2012-05-04 9 views
0

WordNetライブラリを正常にインストールしました。今はプログラムでライブラリを使用しようとしていますが、サンプルプログラムをビルドすることはできません。ライブラリの検索パスが正しいにもかかわらず、リンカーエラー(未定義の参照)が表示されます。ここで C言語でWordNetライブラリを使用するプログラムをコンパイルする際のエラー

は誤りです:

​​

これはこれは、WordNetのライブラリがインストールされている

#include <wn.h> 
#include <stdlib.h> 
int main(int argc, char **argv) { 
    int isOpen = 0 == wninit(); 
    if (isOpen) { 
      printf("wordnet opened!\n"); 
    } 
    else { 
      printf("Could not open WordNet dictionary!\n"); 
    } 
    return 0; 
} 

サンプルプログラムがある

WORDNET_INSTALL=/usr/local/WordNet-3.0 
CFLAGS=-g -I$(WORDNET_INSTALL)/include 
LDFLAGS=-L$(WORDNET_INSTALL)/lib -lWN 

wordnet_sample: wordnet_sample.o 
     gcc $(LDFLAGS) -o wordnet_sample wordnet_sample.o 

wordnet_sample.o: wordnet_sample.c 
     gcc $(CFLAGS) -o wordnet_sample.o -c wordnet_sample.c 

Makefileのある

[[email protected] wordnet_sample]$ ls -l /usr/local/WordNet-3.0/lib/ 
total 180 
-rw-r--r-- 1 root root 172344 May 3 15:34 libWN.a 
drwxr-xr-x 2 root root 4096 May 3 15:34 wnres 

私はリンカーにもっと引数が必要かもしれないと思っていますが、本当にわかりません。誰かがこれに遭遇しますか?私は適切なライブラリとライブラリの検索パスを持っていても、未定義の参照エラーが起こっている理由を知っていますか?

答えて

1

-cCFLAGSを追加する必要があります。

また、最初のgccコマンドはオブジェクトの後にライブラリを持つ必要があります。あなたは最後にLDFLAGSを置いてもよい:

gcc -o wordnet_sample wordnet_sample.o $(LDFLAGS) 

いっそのは、別々のLDFLAGS(リンカにオプション)とLIBS(実際のライブラリにリンクする)を持っています。したがって:

LDFLAGS=-L$(WORDNET_INSTALL)/lib 
LIBS=-lWN 
.... 
gcc $(LDFLAGS) -o wordnet_sample wordnet_sample.o $(LIBS) 
+0

私はメイクファイルを更新しましたが、それでも動作しませんでした。 -cが必要な理由について私に説明することができますか? – RobertoP

+0

正確には動作しません。 '-c'は「コンパイルのみ、リンクしない」を意味します。あなたのmakefile構造は、コンパイルとリンクを2つの段階に分けて設計されています。他の答えで示唆されているように、それを1つのフェーズで実行することは、1つまたは2つのソースファイルを持つ小さなプロジェクトにのみ有効です。 –

+0

ご協力ありがとうございます。 Makefile CFLAGS行を次のように変更しました。CFLAGS = -g -c -I $(WORDNET_INSTALL)/ includeをwordnet_sample.oターゲットから削除しました。私はまだ同じエラー(wninitへの未定義のrefence)で終わった。私はgccのmanページを読んでみてください。 – RobertoP

関連する問題