所以我正在尝试创建一个必须链接到其他库的源文件库。我的make文件看起来像
CC=gcc
CFLAGS=-Wall -g -static -std=c99 -I "./include/ImageMagick-6/"
MAGICKLIB=-Llib -lMagickWand-6.Q16 -lMagickCore-6.Q16
INCLUDE=-lfreetype -ljpeg -lfontconfig -lXext -lSM -lICE -lX11 -lXt -lbz2 -lz -lm -lpng -lgomp -lpthread -lltdl
LINK=$(INCLUDE) $(MAGICKLIB)
COMMON=setUp.o closeOut.o readImage.o writeImage.o edgeEnhance.o resizeImage.o
lib: $(COMMON)
ar -cvq libmyip.a $(COMMON)
setUp.o: setUp.c myip.h
$(CC) $(CFLAGS) -c setUp.c $(LINK)
closeOut.o: closeOut.c myip.h
$(CC) $(CFLAGS) -c closeOut.c $(LINK)
readImage.o: readImage.c myip.h
$(CC) $(CFLAGS) -c readImage.c $(LINK)
writeImage.o: writeImage.c myip.h
$(CC) $(CFLAGS) -c writeImage.c $(LINK)
edgeEnhance.o: edgeEnhance.c myip.h
$(CC) $(CFLAGS) -c edgeEnhance.c $(LINK)
resizeImage.o: resizeImage.c myip.h
$(CC) $(CFLAGS) -c resizeImage.c $(LINK)
myIPTest.o: myIPTest.c myip.h
$(CC) $(CFLAGS) -c myIPTest.c $(LINK)
myIPTest: myIPTest.o myip.h libmyip.a
$(CC) $(CFLAGS) -o myIPTest myIPTest.o -Llib -lmyip
正在运行make我没有错误/警告。当我运行make myIPTest时,我得到了无法识别的引用。我想这可能是因为.o目标(setUp.o等)没有正确链接.c文件?我不确定。我是一个菜鸟,我一直在互联网上搜索几个小时,我似乎无法修复它。你们中的任何人都有任何想法吗?
FIXED:从我的.o目标中删除了所有$(LINK),并将其放在myIPTest目标的末尾,然后就可以了。
答案 0 :(得分:2)
使用-c
选项将源文件编译为目标文件时,所有-lsomelibrary
选项都无用。这些选项仅在编译器将目标文件链接到可执行文件时才有效。
换句话说,$(LINK)
应该添加到makefile中的最后一个操作行(构建myIPTest
的那个);在所有其他方面,它没用。
答案 1 :(得分:0)
-Llib
指示链接器在libmyip.a
目录中查找lib
。另一方面,lib
规则在当前目录中创建libmyip.a
。将-Llib
替换为-L.
,看看会发生什么。
PS:makefile的其余部分也需要一些重构。