c - 如何使用 gcc 编译带有源代码文件的库存档?

标签 c gcc compiler-construction ld unix-ar

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/

相关文章:

linux - 为什么/dev/stdout 是“1

c++ - 初始化列表中 const 引用成员的初始化

compiler-construction - Clang 和 OS X Lion 中的默认编译器

c - Windows native 程序 ZwReadFile 返回错误参数

c - 自动构建C项目

c - 打印文件上的硬链接(hard link)

c - 为什么 isnumber() 函数存在于某些 Unix 发行版中,而其他发行版中却没有?

将进出管道连接到网络套接字

linux - 在 windows 中编译 linux gcc - 在 windows 中使用 nvcc

c - 在创建 "stand alone"编译器时遇到困难