我在尝试着了解静态和共享库 http://randu.org/tutorials/c/libraries.php.
我想执行以下操作来创建一个单独编译和链接的 makefile,以便创建和链接静态库
形成最终的静态可执行文件。
我有以下 Makefile 代码,但出现以下错误
Makefile:13: *** missing separator. Stop.
但我也试图了解如何实际链接/创建库。
如果我之后运行命令line 12
它们在终端中起作用,但在 makefile 中不起作用。
myProgram: main.o addSorted.o freeLinks.o
gcc -lm -o myProgram main.o addSorted.o freeLinks.o
main.o: main.c
gcc -O -c -lm main.c main.h
addSorted.o: addSorted.c addSorted.h
gcc -O -c -lm addSorted.c
freeLinks.o: freeLinks.c freeLinks.h
gcc -O -c -lm freeLinks.c
ar rc libmylib.a main.o addSorted.o freeLinks.o //Error Line
ranlib libmylib.a
gcc -o foo -L. -lmylib foo.o
clean:
rm -f myProgram main.o addSorted.o freeLinks.o
另外,如果您可以帮助改进代码,我将非常感激。
尝试这个:
all: myProgram
myProgram: main.o libmylib.a #libmylib.a is the dependency for the executable
gcc -lm -o myProgram main.o -L. -lmylib
main.o: main.c
gcc -O -c main.c main.h
addSorted.o: addSorted.c addSorted.h
gcc -O -c addSorted.c
freeLinks.o: freeLinks.c freeLinks.h
gcc -O -c freeLinks.c
libmylib.a: addSorted.o freeLinks.o #let's link library files into a static library
ar rcs libmylib.a addSorted.o freeLinks.o
libs: libmylib.a
clean:
rm -f myProgram *.o *.a *.gch #This way is cleaner than your clean
这组规则首先编译所有文件,然后将库(libmylib.a)作为目标并使用它的工件来链接可执行文件。
我还添加了单独的冗余目标形式,仅制作库。
需要的文件:
user@host> ls
addSorted.c addSorted.h freeLinks.c freeLinks.h main.c main.h Makefile
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)