gpt4 book ai didi

c - 使用 -l 标志链接静态库

转载 作者:太空宇宙 更新时间:2023-11-04 01:21:08 26 4
gpt4 key购买 nike

如何使用 -l 标志编译我的 makefile?

我有一个看起来像的makefile

myLibrary:
gcc -c myLibrary.c -o myLibrary.o
ar cr libmyLibrary.a myLibrary.o

然后我用

编译我的主程序
main:
gcc -g -c -o main.o main.c
gcc main.o -o main libmyLibrary.a

上面的 makefile 可以工作,但是如果我想替换

libmyLibrary.a

使用 -lmyLibrary 我得到一个错误。两者不应该一样工作吗?

最佳答案

这是一个基本的、不切实际的 makefile,它将使静态库 libmyLibary在它生成程序 main 之前,它将与静态库链接使用 -L(库搜索路径)和 -l(库)选项。

生成文件

.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 的 makefile 和其他程序的 makefile使用它。

这就是 gcc 链接选项 -L-l 的工作方式:

-L/path/to/search

告诉链接器查找您在 /path/to/search 中使用 -l 选项指定的任何库,在它在默认搜索目录中查找它们之前。当前目录,.,不是链接器的默认搜索目录之一。所以如果你想要它在当前目录下找到一个用-l选项指定的库,那么就需要指定 -L.

-lfoo

告诉链接器搜索动态库 libfoo.so 或静态库库,libfoo.a,首先在您的 -L 目录中,如果有的话,按照您的顺序指定它们,然后在其默认搜索目录中。它停止搜索只要在其中一个搜索目录中找到 libfoo.solibfoo.a。如果它在同一目录中找到它们的 both ,那么默认情况下它将链接 libfoo.so 与你的程序,而不是链接 libfoo.a

关于c - 使用 -l 标志链接静态库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42257463/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com