TL;DR - 我需要用 test.o 编译 archive.a 来生成可执行文件。
背景 - 我试图从我正在修改的软件包中调用单独库中的函数,但该函数(字符串解析器)正在创建分段违规。故障肯定发生在库中,开发人员已要求提供发生错误的测试用例。与其让他尝试编译我正在处理的相当大的软件包,我宁愿给他发送一个调用适当函数的简单程序(希望死在同一个地方)。他的库也使用了多个系统库(lapack、cblas 等),因此链接需要满足我的所有想法。
我可以链接到创建他的库时创建的 .o 文件,但当然它们不会链接到适当的系统库。
这看起来应该是直截了当的,但它让我感到困惑。
最佳答案
.a
扩展名表明它是一个静态库。因此,为了链接到它,您可以在链接阶段使用开关:
gcc -o myprog -L<path to your library> main.o ... -larchive
通常你使用-L 来添加库的存储路径(除非它在当前目录)并且你使用-l<libname>
指定一个库。库名没有扩展名。如果库名为 libarchive.a,您仍会给出 -larchive。
如果您想指定库的全名,那么您可以使用即 -l:libname.a
更新
如果库路径是/usr/lib/libmylibrary.a
你会用
-L/usr/lib -lmylibrary
关于c - 如何使用 gcc 编译带有源代码文件的库存档?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17028236/