gpt4 book ai didi

c - C 编译器如何发现 -lm 指向文件 libm.a?

转载 作者:IT王子 更新时间:2023-10-29 00:43:07 25 4
gpt4 key购买 nike

linux下C程序中的.a文件是什么?是库文件吗?

To merge with the math library libm.a you would type

cc -o program_name prog.c -lm

when you compile the program. The -lm means: add in libm. If we wanted to add in the socket library libsocket.a to do some network programming as well, we would type

cc -o program_name prog.c -lm -lsocket

and so on.

编译器如何发现 -lm 指向文件 libm.a 和 -lsocket 指向文件 libsocket.a?

如果我们在程序中加入头文件,编译时是否一定要提到库?

最佳答案

正如 Ignacio 所说,.a 文件是静态库。 “a”代表“存档”,.a 文件由名为“ar”的程序构建。

每个 .a 文件包含一个或多个 .o 文件和名称索引。在链接过程中,只有包含已用名称的 .o 文件会包含在最终程序中。这样一来,就不会包含整个 C 库,而只会复制使用过的函数,例如“printf”。

编译器如何找到库?它有一个内置的搜索库路径集合。例如,如果被问到,GCC 会告诉您它的搜索路径:

# gcc -print-search-dirs
install: /usr/lib/gcc/i686-redhat-linux/4.4.4/
programs: =/usr/libexec/gcc/i686-redhat-linux/4.4.4/:/usr/libexec/gcc/i686-redhat-linux/4.4.4/:/usr/libexec/gcc/i686-redhat-linux/:/usr/lib/gcc/i686-redhat-linux/4.4.4/:/usr/lib/gcc/i686-redhat-linux/:/usr/libexec/gcc/i686-redhat-linux/4.4.4/:/usr/libexec/gcc/i686-redhat-linux/:/usr/lib/gcc/i686-redhat-linux/4.4.4/:/usr/lib/gcc/i686-redhat-linux/:/usr/lib/gcc/i686-redhat-linux/4.4.4/../../../../i686-redhat-linux/bin/i686-redhat-linux/4.4.4/:/usr/lib/gcc/i686-redhat-linux/4.4.4/../../../../i686-redhat-linux/bin/
libraries: =/usr/lib/gcc/i686-redhat-linux/4.4.4/:/usr/lib/gcc/i686-redhat-linux/4.4.4/:/usr/lib/gcc/i686-redhat-linux/4.4.4/../../../../i686-redhat-linux/lib/i686-redhat-linux/4.4.4/:/usr/lib/gcc/i686-redhat-linux/4.4.4/../../../../i686-redhat-linux/lib/:/usr/lib/gcc/i686-redhat-linux/4.4.4/../../../i686-redhat-linux/4.4.4/:/usr/lib/gcc/i686-redhat-linux/4.4.4/../../../:/lib/i686-redhat-linux/4.4.4/:/lib/:/usr/lib/i686-redhat-linux/4.4.4/:/usr/lib/

您可以使用“-L/path”选项添加更多库搜索路径。

在这些路径中,它首先搜索以“.so”扩展名命名的“动态库”。然后它会搜索扩展名为“.a”的静态库。它总是在名称的前面添加“lib”。

关于c - C 编译器如何发现 -lm 指向文件 libm.a?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3907498/

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