静态库在命令行中很好地链接,但不能通过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和命令行的屏幕截图。
答案 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!