使用makefile编译时,出现“/usr/bin/ld: cannot find -lc”的错误。

44

首先说明背景:我有一个头文件(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

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


ar rcs lib/libevento.a event.o <- 这里有错别字还是在实际的 makefile 中? - Daniel Fischer
4
看起来你没有进行静态链接所需的C库。你是在哪个平台上编译这个程序? - hoxworth
此时,我正在使用CentOS进行编译。同样的程序已经在Ubuntu上测试通过了。 - SealCuadrado
3
尝试安装glibc静态库 - yum install glibc-static。如果不起作用,你的LIBRARY_PATH很可能不包括libc.a的位置(虽然我会假设-L./lib应该有这个...)。 - hoxworth
或者尝试使用 gcc main.c -L./lib -l event -o work -Wall - Valeri Atamaniouk
1个回答

96

具体的错误是下面这一行:

/usr/bin/ld: cannot find -lc
链接器无法找到用于静态链接您的库所需的C库。您可以尝试调用locate libc.a,查看系统上是否已经存在libc.a。如果有返回结果,则需要添加一个适当的库标志,指向包含libc.a的目录。
如果未安装libc.a,则不幸的是,如果您想要静态编译您的库,您需要安装该库。由于您所述的操作系统是CentOS,因此您可以使用yum install glibc-static命令来完成此操作。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接