4

UbuntuでEclipseを使用して、Cコードを記述/コンパイル/実行しています。プロジェクトをビルドしようとしています。以下は、Eclipseコンソールでの出力です。

22:18:31 **** Build of configuration Debug for project Project1 ****
make all 
Building file: ../project1.c
Invoking: GCC C Compiler
gcc -I/lib/i386-linux-gnu -O0 -g3 -Wall -c -fmessage-length=0 -pthread -lm -MMD -MP -MF"project1.d" -MT"project1.d" -o "project1.o" "../project1.c"
../project1.c: In function ‘main’:
../project1.c:146:6: warning: unused variable ‘this_thread_id’ [-Wunused-variable]
../project1.c: In function ‘_pre_init’:
../project1.c:126:1: warning: control reaches end of non-void function [-Wreturn-type]
Finished building: ../project1.c

Building file: ../scheduler.c
Invoking: GCC C Compiler
gcc -I/lib/i386-linux-gnu -O0 -g3 -Wall -c -fmessage-length=0 -pthread -lm -MMD -MP -MF"scheduler.d" -MT"scheduler.d" -o "scheduler.o" "../scheduler.c"
Finished building: ../scheduler.c

Building target: Project1
Invoking: GCC C Linker
gcc -L/lib/i386-linux-gnu -lm -pthread -o "Project1"  ./project1.o ./scheduler.o   
./project1.o: In function `advance_global_time':
/home/akshay/Cworkspace/Project1/Debug/../project1.c:50: undefined reference to `floor'
collect2: ld returned 1 exit status
make: *** [Project1] Error 1

誰かが私が問題が何であるか、そしてそれを解決する方法を理解するのを手伝ってくれますか?

4

3 に答える 3

6

オブジェクトファイルの後にライブラリをリンクする必要があります。

あなたが持っている:

gcc -L/lib/i386-linux-gnu -lm -pthread -o "Project1"  ./project1.o ./scheduler.o   

必要なもの:

gcc -L/lib/i386-linux-gnu -pthread -o "Project1"  ./project1.o ./scheduler.o -lm 

リンカの動作方法に変更があったようです。オブジェクトファイルの前に共有ライブラリ(数学ライブラリなど)を指定することが可能であり、すべてが動作していました。ただし、現在、共有ライブラリがスキャン時にシンボルを満たさない場合は、リンクプロセスから除外されます。ライブラリがこれを修正する前に、オブジェクトファイルがリストされていることを確認してください。

'pthread_create'への未定義の参照も参照してください。同じ問題、同じ解決策。そして、それがSOでの唯一のそのような質問であるかどうかは疑問です。

于 2013-02-07T06:27:37.987 に答える
2

数学ライブラリに対してリンクする必要があります。つまり、-lmリンク行の最後に追加します。Eclipseでそれを行う方法がわかりません。申し訳ありません。

于 2013-02-07T03:35:10.013 に答える
1

出力のリンク フラグが順不同に見えることに注意してください。-lmおそらく、Eclipse のリンカー フラグを介してを追加しようとしました。これにより、Eclipse で問題が発生します。試してみることをお勧めします...

プロジェクトを右クリック -> プロパティ -> C/C++ ビルド -> 設定 -> GCC リンカ -> ライブラリ -> "m" を追加 -> 適用 -> ビルド

または、まさにリストで、-L および -l パラメータが、リンク プロセスの .o ファイルの後にあることを確認してください。

私は今日これに見舞われたばかりで、しばらくの間私を逃れました.

于 2013-02-07T03:45:22.597 に答える