如果你必须在 clang 中使用 `-llibary` 选项

如果你必须在 clang 中使用 `-llibary` 选项

想知道你是否必须使用-llib选项。例如:

clang -lasdf foo.c -o foo.o

将库链接/usr/local/lib/libasdf.dylibfoo.c,但想知道是否有任何方法不必包含它,因此它像其他系统库一样工作,您只需执行#include <math.h>而不必链接任何东西。

也许这就是他们正在谈论的这里

libSystem 库还包括您通常希望在 libc 和 libm 中找到的函数、RPC 服务和名称解析器。由于 libSystem 会自动链接到您的应用程序中,因此您无需将其显式添加到编译器的链接行中。为了方便起见,许多这些库都以 libSystem 的符号链接形式存在,因此虽然不需要显式链接 -lm(例如),但不会导致错误

答案1

从 Apple ld 的手册页中,该-llib选项传递给:

-lx 此选项告知链接器在库搜索路径中搜索 libx.dylib 或 libx.a。如果字符串 x 的形式为 yo,则在相同位置搜索该文件,但不会在文件名前添加“lib”或在文件名后添加“.a”或“.dylib”。

从这一点来看,似乎没有办法不使用,-l因为该标志所做的只是告诉链接器查找库,然后将其链接到可执行文件中。它不会自动包含在内,因为它不是您引用的 libSystem 库的一部分,而 libSystem 库似乎是 macOS 上唯一自动链接的库。/usr/local/lib/ 中的库(至少在 MacOS 上)不是系统库,因为它们会自动链接,因为 /usr/local/lib 通常用于用户安装的库。

相关内容