ubuntu 16.04 LTS-`sin 'への未定義の参照



Ubuntu 16 04 Lts Undefined Reference Sin



ubuntu 16.04 LTS-`sin 'への未定義の参照

ubuntu 16.04LTS-`cos 'への未定義の参照



ubuntu 16.04LTS-`exp 'への未定義の参照

ubuntu 16.04LTS-`sqrt 'への未定義の参照

1. atof_example_1.c



/* ============================================================================ Name : atof_example_1.c Author : foreverstrong Version : Copyright : Your copyright notice Description : Hello World in C, Ansi-style ============================================================================ */ /* atof example: sine calculator */ #include /* printf, fgets */ #include /* atof */ #include /* sin */ int main() { double n, m double pi = 3.1415926535 char buffer[256] printf('Enter degrees: ') fgets(buffer, 256, stdin) n = atof(buffer) m = sin(n * pi / 180) printf('The sine of %f degrees is %f ', n, m) return 0 }
2.目的のプロジェクトを右クリック->プロジェクトのビルド
13:36:53 **** Build of configuration Debug for project atof_example **** make all Building file: ../src/atof_example_1.c Invoking: GCC C Compiler gcc -O0 -g3 -Wall -c -fmessage-length=0 -MMD -MP -MF'src/atof_example_1.d' -MT'src/atof_example_1.o' -o 'src/atof_example_1.o' '../src/atof_example_1.c' Finished building: ../src/atof_example_1.c Building target: atof_example Invoking: GCC C Linker gcc -o 'atof_example' ./src/atof_example_1.o ./src/atof_example_1.o: In function `main': /home/strong/eclipse-work/atof_example/Debug/../src/atof_example_1.c:25: undefined reference to `sin' makefile:30: recipe for target 'atof_example' failed collect2: error: ld returned 1 exit status make: *** [atof_example] Error 1 13:36:54 Build Finished (took 317ms)

3.目的のプロジェクトを右クリック->プロパティ-> C / C ++ビルド->設定->ツール設定-> GCC Cリンカー->ライブラリ->ライブラリ(-l)->追加...-> OK- >適用して閉じる



追加されたライブラリはlibm.soです。プログラムにはmath.hが含まれています。リンクするときは、数学ライブラリにリンクして、-lmコンパイラオプションを追加する必要があります。
math.hで宣言されているライブラリ関数の使用には特別なことがあります。 -lmオプションをgccコマンドラインに追加する必要があります。数学関数はlibm.soライブラリファイルにあるため(これらのライブラリファイルは通常/ libディレクトリにあります)、-lmオプションは、プログラムで使用される数学関数がこのライブラリファイルにあることをコンパイラに通知します。この本で使用されているライブラリ関数のほとんど(printfなど)は、libc.soライブラリファイルにあります。 libc.soのライブラリ関数を使用する場合、コンパイル時に-lcオプションを追加する必要はありません。もちろん、このオプションはgccのデフォルトオプションであるため、追加することは間違いではありません。
-lオプションを使用して、指定したパスを定義します。入力されていない場合、デフォルトは/ libおよび/ usr / libです。 Linuxのすべての関数ライブラリはlibで始まるためです。したがって、ヘッドとテールを削除すると、mはlibm.soを表します(mはライブラリ名、libm.soはライブラリファイル名です)。 -lパラメーターを使用する場合、通常の習慣は、lib関数ライブラリヘッダーと次のバージョン番号を削除し、ライブラリ名とパラメーター-lを使用して-lmを形成するためにリンクすることです。 gccがライブラリを見つけられない場合は、-lを使用してライブラリ名を直接指定します。 (ライブラリがデフォルトのパスにない場合は、-Lオプションを使用してパスを追加します。gccsin.c-lm-osinはgccsin.c -lm -L / lib -L ​​/ usr / lib-と同等です。 o罪)。


4.目的のプロジェクトを右クリック->プロジェクトのビルド



13:48:22 **** Incremental Build of configuration Debug for project atof_example **** make all Building target: atof_example Invoking: GCC C Linker gcc -o 'atof_example' ./src/atof_example_1.o -lm Finished building target: atof_example 13:48:22 Build Finished (took 317ms)出力:
Enter degrees: 45 The sine of 45.000000 degrees is 0.707107