无法从Makefile链接静态库

sel*_*fbg 0 c linux gcc makefile static-libraries

我构建了一个静态库.问题是我无法从我的Makefile链接它

TARGET  =       AR1020
CC      =       gcc
CFLAGS  =       -Wall -std=c99 -I./inc/
LINKER  =       gcc -o
LFLAGS  =       -Wall -static -I./inc/


SRCDIR  =       src
INCDIR  =       inc
OBJDIR  =       obj
BINDIR  =       bin

LIBDIR  =       ./lib
LIBFLAG =       -li2c


SOURCES         :=      $(wildcard $(SRCDIR)/*.c)
INCLUDES        :=      $(wildcard $(INCDIR)/*.h)
OBJECTS         :=      $(SOURCES:$(SRCDIR)/%.c=$(OBJDIR)/%.o)
rm              =       rm -f

$(BINDIR)/$(TARGET): $(OBJECTS)
        @$(LINKER) $@ $(LFLAGS) -L$(LIBDIR) $(LIBFLAG) $(OBJECTS)
        @echo "Linking complete!"

$(OBJECTS): $(OBJDIR)/%.o : $(SRCDIR)/%.c
        @$(CC) $(CFLAGS) -c $< -o $@
        @echo "Compiled "$<" successfully"

.PHONY: clean
clean:
        @$(rm) $(OBJECTS)
    @echo "Cleanup complete!"

.PHONY: remove
remove: clean
        @$(rm) $(BINDIR)/$(TARGET)
        @echo "Exacutable removed!"
Run Code Online (Sandbox Code Playgroud)

我的树是:

|-- bin
|-- inc
|   |-- color.h
|   |-- EXT.h
|   |-- EXT.h~
|   |-- gpio_lib.h
|   `-- test.h
|-- lib
|   |-- i2c.c
|   |-- i2c.o
|   `-- libi2c.a
|-- Makefile
|-- obj
|   |-- AR1020.o
|   |-- gpio_lib.o
|   |-- gpio.o
|   `-- test.o
`-- src
    |-- AR1020.c
    |-- gpio_lib.c
    `-- libi2c.a
Run Code Online (Sandbox Code Playgroud)

我想链接libi2c.a,但我收到错误"未定义引用'.....'.如果我手动编译它,如:

gcc src/AR1020.c lib/libi2c.a
Run Code Online (Sandbox Code Playgroud)

一切都按照应有的方式进行编译.有人能帮我吗?

nos*_*nos 9

您想要链接的库需要在使用这些库中的任何内容的目标文件之后,所以

@$(LINKER) $@ $(LFLAGS) -L$(LIBDIR) $(LIBFLAG) $(OBJECTS)
Run Code Online (Sandbox Code Playgroud)

应该

@$(LINKER) $@ $(LFLAGS) -L$(LIBDIR)  $(OBJECTS) $(LIBFLAG)
Run Code Online (Sandbox Code Playgroud)