最初にコンテキスト:ヘッダー(event.h)、event.cというプログラム、およびメインプログラムmain.cがあります。このプログラムはコンパイルされ、最初にオブジェクトプログラム(event.o)、次に別のフォルダーの静的ライブラリ(libevent.a)、次に実行可能プログラムwork1.exeが生成されます。
これを行うために、このmakefileを作成しました。
work1 : main.c libevent.a
gcc -static main.c -L./lib -levent -o work1 -Wall
event.o: event.c
gcc -c event.c -Wall
libevent.a: event.o
ar rcs lib/libevento.a event.o
clean:
rm work1 *.o
メイクファイルを実行した結果、次のエラーが発生します。
$ make
gcc -c event.c -Wall
ar rcs lib/libevent.a event.o
gcc -static main.c -L./lib -levent -o work1 -Wall
/usr/bin/ld: cannot find -lc
collect2: ld returned 1 exit status
make: *** [work1] Error 1
ここで何が起こっているのでしょうか?何もインストールせずにこれをコンパイルする方法はありますか?
特定のエラーは次の行です。
/usr/bin/ld: cannot find -lc
リンカーは、ライブラリを静的にリンクするために必要なCライブラリを見つけることができません。 libc.a
を呼び出すことにより、locate libc.a
がシステムに既に存在するかどうかを確認できます。これが返される場合、libc.a
を含むディレクトリを指す適切なライブラリフラグを追加します。
libc.a
がインストールされていない場合、ライブラリを静的にコンパイルする場合、残念ながらライブラリをインストールする必要があります。あなたはCentOSにいると述べたので、yum install glibc-static
でこれを達成できるはずです。