如何在gcc make中链接静态lib?

时间:2015-01-16 22:33:06

标签: c gcc makefile ld

静态库在命令行中很好地链接,但不能通过makefile链接。编译部件访问包含文件似乎没问题,但是make文件中的ld进程必定是错误的。 感谢您的帮助!

这是我的命令行:

gcc -o quadEq.exe quadEq.c -I../include -L../lib -lnowic

这是我的Makefile:

CFLAGS = -Wall -g -c
INCLUDE = -I../include
LDFLAGS = -L../lib
LDLIBS = -lnowic
SOURCES = quadEq.c
OBJECTS = $(SOURCES:.c=.o)

EXE = quadEq

all: $(SOURCES) $(EXE)

$(EXE): $(OBJECTS)
    gcc $(OBJECTS) $(LDFLAGS) $(LDLIBS) -o $@ 

.c.o:
    gcc $(CFLAGS) $(INCLUDE) $< -o $@ 

这是我运行Makefile和命令行的屏幕截图。

enter image description here

2 个答案:

答案 0 :(得分:1)

静态库关注您链接它们的顺序。如果libA.a取决于libB.a,那么您必须-lB -lA

如果libA.a符号取决于取决于libB.a符号的libA.a,则必须循环链接:-lB -lA -lB。我已经看到一些循环可以达到大约3或4个循环,但一般来说2就足够了。

这与动态库链接不同,它不仅不关心你链接它们的顺序,而且你也不需要链接依赖库,因为.so指定它们。

答案 1 :(得分:0)

根据Aggieboy的建议,我重新编写了makefile并使其正常工作。

CC = gcc
CFLAGS = -x c -Wall -g 
INCPATH = -I../include
LIBPATH = -L../lib
LLIBS = -lnowic

%: %.c
    $(CC) -o $@ $(CFLAGS) $(INCPATH) $< $(LIBPATH) $(LLIBS) 

顺便说一句,这接受了命令行参数的文件名。 再次感谢Aggieboy!