【发布时间】:2021-11-09 03:11:41
【问题描述】:
在使用 libc 符号时,我是否应该将我的程序或库与 libc 显式链接?
即cc ... -lc
如果是程序,该问题适用于 Makefile,如果是库,则适用于 Makefile 和 pkg-config 文件。
附带一个问题:如果我根本不使用任何 libc 符号怎么办?那可能是一个非常没用的程序,但我很好奇。
我似乎记得有一些文章或书籍推荐这样做,但现在我找不到了。在任何情况下这样做或不这样做都会有问题?
编辑:
我通常使用gcc 和clang。 (我还编辑了第三段以明确询问 Makefile 和 pkg-config 文件。)
【问题讨论】:
-
1.大多数编译器在调用链接器时会添加正确的标志以自动链接 libc。 2. 取决于编译器,但你仍然需要 libc 来处理 CRT 的东西,比如调用 main 的函数、从 main 返回后退出等。
-
您可能应该提及您正在使用的特定编译器
-
1) 我不熟悉任何不会自动隐式链接到 libc 的“主流”编译器。嵌入式系统的交叉编译器完全是另一回事。 2) 问:如果您不进行任何 libc 调用会怎样?答:链接器根本不会尝试链接大多数不需要的外部例程。这可能(也可能不会)影响可执行文件的大小。 3) 如果您愿意,一些编译器/链接器允许您显式排除标准库。例如:/docs.microsoft.com/en-us/cpp/build/reference/…
-
-lc选项由cc编译器/链接器前端自动提供给链接器。如果您使用cc进行编译并使用ld进行显式链接,则需要使用-lc选项运行ld以链接libc 库。
标签: c unix linker shared-libraries libc