libtommathライブラリを使用しようとしています。私はUbuntu Linuxで自分のプロジェクトにNetBeans IDEを使用しています。私はライブラリをダウンロードしてビルドしました。作成された.aファイルを/ usr/lib /に、.hファイルを/ usr/includeに入れました。ライブラリをインクルードしようとしても、メッセージに未定義の参照が残っています
ファイルを検索しているようです(私はもはや/ usrディレクトリにインストールする前にこれらのエラーを取得していないため)。
私は(ライブラリ内にある)mp_initする呼び出しを行うシンプルなメインを作成するとき、私は自分のプロジェクトを作成しようとしたときしかし、私は次のエラーを取得する:
mkdir -p build/Debug/GNU-Linux-x86
rm -f build/Debug/GNU-Linux-x86/main.o.d
gcc -c -g -MMD -MP -MF build/Debug/GNU-Linux-x86/main.o.d -o build/Debug/GNU-Linux-x86/main.o main.c
mkdir -p dist/Debug/GNU-Linux-x86
gcc -o dist/Debug/GNU-Linux-x86/cproj1 build/Debug/GNU-Linux-x86/main.o
build/Debug/GNU-Linux-x86/main.o: In function 'main':
/home/[[myusername]]/NetBeansProjects/CProj1/main.c:18: undefined reference to `mp_init'
collect2: ld returned 1 exit status
make[2]: *** [dist/Debug/GNU-Linux-x86/cproj1] Error 1
だから、それがどのように見えますリンカーはライブラリ内の関数を見つけることができませんが、そこにありますので、何が原因か分かりません。
gccコマンドを直接入力してmakefileをスキップすると、同じエラーが表示されます。静的ライブラリもgccでコンパイルされていることを確認しました。
編集追加する:
を私は直接コンパイルを行うと、-lまたは-Lでライブラリを追加した場合、私はこれらの同じエラーを取得:
$ gcc -l /usr/lib/libtommath.a main.c
/usr/bin/ld: cannot find -l/usr/lib/libtommath.a
collect2: ld returned 1 exit status
$ gcc -llibtommath.a main.c
/usr/bin/ld: cannot find -llibtommath.a
collect2: ld returned 1 exit status
$ gcc -Llibtommath.a main.c
/tmp/ccOxzclw.o: In function `main':
main.c:(.text+0x18): undefined reference to `mp_init'
collect2: ld returned 1 exit status
$ gcc -Llibtommath.a main.c
/tmp/ccOxzclw.o: In function `main':
main.c:(.text+0x18): undefined reference to `mp_init'
collect2: ld returned 1 exit status
私はこのようなものに非常にさびていますので、私はここで適切なコマンドを使用しているかどうかはわかりませんが、-Lの例ではライブラリが見つかりましたか?ライブラリが見つからない場合はどうすればライブラリを見つけることができますか?これは/ usr/libにあり、カレントディレクトリの.aファイルで試してみました。設定が必要な環境変数はありますか?もしそうなら、方法など
私はまったく別のライブラリ(GMP)を試して、同じ問題を抱えています。これは何らかのUbuntu環境の問題でなければなりませんか?誰でもどのようにこれを修正する考えですか?
のように「C」が続いする必要があります+1ああ、ありがとう!私はリンク解決の順序が理にかなっていることを知っていますが、実際にはこれらの事実を思い出すのに役立ちます! – scraimer
これは私のために働いた。私の非常に古いmakefileは動作していましたが、今はコンパイラが自分のためにあまりにもスマートになっているようです:) –
ありがとう、これは素晴らしいお知らせでした! –