使用线程和我的库

时间:2015-12-15 15:54:03

标签: makefile static-libraries gnu-make

所以我一直在寻找可以帮助我使用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上运行。

1 个答案:

答案 0 :(得分:1)

-l标志需要一个参数。当它在gcc语句中组合时,会导致prac3.o参数被视为库的名称。没有这样的库prac3.o,所以你得到错误。

一般来说.o个文件不是&#34;&#34;库&#34;。它们是目标文件。删除-l标志,你会没事的。

&#34;文库&#34;通常是来自库路径的.a.so个文件 - 但即使这样,您也不会指定后缀(.e.g&#34; -lpthreads&#34;)。