38

上下文优先:我有一个头文件(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

执行makefile的结果会导致这个错误:

 $ 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

知道这里发生了什么吗?有没有办法在不安装任何东西的情况下编译它?

4

1 回答 1

81

具体错误如下:

/usr/bin/ld: cannot find -lc

链接器找不到静态链接库所需的 C 库。您可以通过调用来尝试查看libc.a您的系统上是否已经存在locate libc.a。如果返回,请添加一个适当的库标志,指向包含libc.a.

如果libc.a没有安装,如果你想静态编译你的库,很遗憾你需要安装这个库。既然你说你在 CentOS 上,你应该可以用yum install glibc-static.

于 2013-04-15T21:49:51.883 回答