所以我一直在寻找可以帮助我使用Makefile的东西,但是我找不到任何东西,所以这就是为什么我在这里。
我的makefile现在是这样的:
CC = gcc
CFLAGS = -Wall
LDFLAGS += -L$(LIBB)
LDFLAGS += -static lib1.h
LDLIBS = -lm -lpthread -lrt -l
SOURCES=lib1.c prac3.c prac3_reader.c
LIBRARIES=lib1.o
INCLUDES=lib1.h
PROGRAMS=prac3 prac3_reader
all: $(OBJS) $(PROGRAMS)
$(PROGRAMS): $(LIBRARIES) $(INCLUDES)
$(CC) $(LDFLAGS) $(LIBRARIES) $(LDLIBS) $@.o -o $@
%.o: %.c $(INCLUDES)
$(CC) $(CFLAGS) -o $@ -c $<
clean:
rm -rf *.o *~ $(PROGRAMS)
我知道可能有很多东西可以删除,但我真的不知道是哪些东西。我有两个名为
的程序prac3.c
和
prac3_reader.c
另外,我有自己的名为
的库lib1.c
并编译为
lib1.h
当我使用终端进入我的目录并使用命令make
时,我发现了这个错误:
gcc -L -static lib1.h lib1.o -lm -lpthread -lrt -l prac3.o -o prac3
/usr/bin/ld: no se puede encontrar -lprac3.o
collect2: error: ld returned 1 exit status
Makefile:15: recipe for target 'prac3' failed
make: *** [prac3] Error 1
我在Ubuntu上运行。
答案 0 :(得分:1)
-l
标志需要一个参数。当它在gcc
语句中组合时,会导致prac3.o
参数被视为库的名称。没有这样的库prac3.o
,所以你得到错误。
一般来说.o
个文件不是&#34;&#34;库&#34;。它们是目标文件。删除-l
标志,你会没事的。
&#34;文库&#34;通常是来自库路径的.a
或.so
个文件 - 但即使这样,您也不会指定后缀(.e.g&#34; -lpthreads&#34;)。