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
私はリンカーにもっと引数が必要かもしれないと思っていますが、本当にわかりません。誰かがこれに遭遇しますか?私は適切なライブラリとライブラリの検索パスを持っていても、未定義の参照エラーが起こっている理由を知っていますか?
私はメイクファイルを更新しましたが、それでも動作しませんでした。 -cが必要な理由について私に説明することができますか? – RobertoP
正確には動作しません。 '-c'は「コンパイルのみ、リンクしない」を意味します。あなたのmakefile構造は、コンパイルとリンクを2つの段階に分けて設計されています。他の答えで示唆されているように、それを1つのフェーズで実行することは、1つまたは2つのソースファイルを持つ小さなプロジェクトにのみ有効です。 –
ご協力ありがとうございます。 Makefile CFLAGS行を次のように変更しました。CFLAGS = -g -c -I $(WORDNET_INSTALL)/ includeをwordnet_sample.oターゲットから削除しました。私はまだ同じエラー(wninitへの未定義のrefence)で終わった。私はgccのmanページを読んでみてください。 – RobertoP