带有线程和我的库的 makefile 出错
Error on makefile with threads and my library
所以我一直在搜索和寻找可以帮助我使用 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。
-l
标志需要一个参数。当它在 gcc
语句中组合时,它会导致 prac3.o
参数被视为库的名称。没有这样的库prac3.o
,所以你得到错误。
通常 .o
文件不是 "libraries"。它们是目标文件。删除 -l
标志,你会没事的。
"libraries" 通常是来自库路径的 .a
或 .so
文件 - 但即便如此,您也不会指定后缀(例如“-lpthreads”)。
所以我一直在搜索和寻找可以帮助我使用 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。
-l
标志需要一个参数。当它在 gcc
语句中组合时,它会导致 prac3.o
参数被视为库的名称。没有这样的库prac3.o
,所以你得到错误。
通常 .o
文件不是 "libraries"。它们是目标文件。删除 -l
标志,你会没事的。
"libraries" 通常是来自库路径的 .a
或 .so
文件 - 但即便如此,您也不会指定后缀(例如“-lpthreads”)。