0

学校の Ubuntu 11.04 サーバーに ssh で接続して、コードを送信する必要があります。このリンクは問題ありません。

ME@SCHOOL:~/309/project2$ make
gcc -lm treesort.c -o treesort
ME@SCHOOL:~/309/project2$

私のローカル マシンは Ubuntu 12.04 を実行しています。これは同じコードのコンパイラ出力ですが、NetBeans メイクファイルを使用しています。

gcc -lm    -o dist/Release/GNU-Linux-x86/treesort build/Release/GNU-Linux-x86/sortFns.o build/Release/GNU-Linux-x86/treesort.o  
build/Release/GNU-Linux-x86/treesort.o: In function `processargs':
treesort.c:(.text+0x144): undefined reference to `log'
collect2: ld returned 1 exit status

最初の例と同じコードとメイクファイルを使用して、ローカル マシンでコマンド ラインを使用します。

ME@MYCOMPUTER:~/Documents/CSCI/309/project2$ make
gcc -lm treesort.c -o treesort
/tmp/ccY5GqF1.o: In function `processargs':
treesort.c:(.text+0x2b5): undefined reference to `log'
collect2: ld returned 1 exit status
make: *** [all] Error 1
ME@MYCOMPUTER:~/Documents/CSCI/309/project2$

これは非常に腹立たしく、ローカル マシンではなくサーバーで動作する理由がわかりません。この質問を見つけましたが、役に立ちませんでした。

4

1 に答える 1

1

-lmリンク行の最後に置きます。リンク行のソース、オブジェクト、および (アーカイブ) ライブラリの順序は重要であり、あなたの順序は間違っています。

リンク-lm行の最後に配置しても問題が解決しない場合は、システムのどこかにのライブラリが呼び出されているため、それがどこから来たのかを突き止めて削除する必要があります。libm.{a,so}

libmリンカーが見つけているものを見つけることができますgcc -Wl,-t ...

于 2012-10-07T16:56:38.957 に答える