上下文:我有一个标题(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
知道这里发生了什么吗?有没有办法在不安装任何东西的情况下编译它?
答案 0 :(得分:59)
具体错误如下:
/usr/bin/ld: cannot find -lc
链接器找不到静态链接库所需的C库。您可以通过调用libc.a
来尝试查看系统中是否已存在locate libc.a
。如果返回,请添加指向包含libc.a
的目录的相应库标志。
如果未安装libc.a
,如果您想静态编译库,则很遗憾需要安装库。既然你说你在CentOS上,你应该能够用yum install glibc-static
完成这个。