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)
一切都按照应有的方式进行编译.有人能帮我吗?
您想要链接的库需要在使用这些库中的任何内容的目标文件之后,所以
@$(LINKER) $@ $(LFLAGS) -L$(LIBDIR) $(LIBFLAG) $(OBJECTS)
Run Code Online (Sandbox Code Playgroud)
应该
@$(LINKER) $@ $(LFLAGS) -L$(LIBDIR) $(OBJECTS) $(LIBFLAG)
Run Code Online (Sandbox Code Playgroud)