如何链接到 C 中的静态库?

Posted

技术标签:

【中文标题】如何链接到 C 中的静态库?【英文标题】:How to link to a static library in C? 【发布时间】:2018-09-14 01:51:44 【问题描述】:

我使用 code::blocks 来编译我的静态库。输出结果是一个 libstatic.a 文件。 现在,如何链接到我的库以使用已编译的函数?

(我尝试使用#include "libstatic.a" 但我的项目没有编译)

【问题讨论】:

【参考方案1】:

您应该#include "libstatic.h",即在您的代码中使用适当的头文件(这就是您的代码无法编译的原因)并在链接器选项中包含您的libstatic.a 的路径作为一个您的输入库。

这个webpage 有一些关于链接到静态库的示例,例如

gcc -I. -o jvct jvct.c libjvc.a

【讨论】:

谢谢。最后我在代码块上完成了它,我发现#include .h 文件不需要与 .a 文件同名。【参考方案2】:
cc -o yourprog yourprog.c -lstatic

cc -o yourprog yourprog.c libstatic.a

【讨论】:

我尝试了第二个,它有效。谢谢。我也可以配置 code::blocks 来工作。 :-)【参考方案3】:

我必须在我的 makefile 中设置库路径。对于这种情况,您可以使用:

gcc -o myapp main.c -L. -lstatic

【讨论】:

【参考方案4】:
gcc -I. -o jvct jvct.c libjvc.a

【讨论】:

【参考方案5】:

要纯静态链接,请使用-static

cc -static yourprogram.c libstatic.a

【讨论】:

请注意,这将导致编译器静态链接到 所有 库,包括 libc,并生成静态链接的二进制文件。这可能是您想要的(或不是)。

以上是关于如何链接到 C 中的静态库?的主要内容,如果未能解决你的问题,请参考以下文章

如何与现有自动制作项目中的静态库链接

C中的动态库与静态库

C中的动态库与静态库

如何使用 ExternalProject_Add 静态链接到 NATS C 库

如何使静态库中的 gcc 链接强符号覆盖弱符号?

如何防止静态库中的所有符号加载以及为什么在链接静态库时导出相同.o文件中的其他符号进行测试