这是一个基本的,不切实际的makefile文件,这将使静态库libmyLibary
它使程序main
,它将与静态库 使用-L
(库搜索路径)和-l
(库)选项链接之前。
的Makefile
.PHONY: all clean
all: libmyLibrary.a main
main: main.o | libmyLibrary.a
$(CC) -o main main.o -L. -lmyLibrary
libmyLibrary.a: myLibrary.o
$(AR) rcs libmyLibrary.a myLibrary.o
clean:
rm -f *.o libmyLibrary.a main
它运行,如:
$ make
cc -c -o myLibrary.o myLibrary.c
ar rcs libmyLibrary.a myLibrary.o
cc -c -o main.o main.c
cc -o main main.o -L. -lmyLibrary
当我想你知道,这是不现实的,使这两个图书馆和在相同的makefile与它连接的程序 ,因为一个库的点是 ,你不需要继续重建它以链接它与许多程序。你真的有 生成文件libmyLibrary.a
和 使用它的程序的其他生成文件。
这是怎么gcc的链接选项-L
和-l
工作:
-L/path/to/search
告知链接查找您用-l
选项/path/to/search
指定, 任何库,它看起来对他们在其默认前搜索目录。当前目录.
, 不是链接器的默认搜索目录之一。所以,如果你想让它 找到当前目录下的-l
选项指定库,那么你需要 指定-L.
-lfoo
告知链接搜索任何一个动态库,libfoo.so
,或静态 库,libfoo.a
,首先在您的-L
目录中,如果有的话,按照 指定的顺序,然后在其默认搜索目录中。如果在其中一个搜索目录中找到libfoo.so
或libfoo.a
,它将立即停止搜索 。 如果它发现这两个他们在同一目录中,则默认情况下它会链接libfoo.so
与 您的程序,而不是链接libfoo.a
。
您需要添加-L选项以设置要找到您的库的目录。链接器不会在当前目录中查找使用-l指定的库。如果你所有的构建发生在一个目录中,'-L.'应该可以正常工作。 –