c++ - 用于创建静态库的链接库

标签 c++ linux g++ unix-ar

我在 Lib_file.h 和 Lib_file.cpp 中写了一些代码。我希望将此代码转换为静态库。我能够编译代码(使用命令 g++ -I <necessary include files> -o Lib_file.o Lib_file.cpp )来获取 Lib_file.o。我还可以使用 ar rvs Lib_file.a Lib_file.o 将其添加到存档中命令。现在,当我尝试使用 -L 选项在其他代码中使用此库时,出现 undefined reference 错误。此错误指向我的 Lib_file.o 中的代码。所以我的问题是如何让我的 Lib_file.cpp 中的代码链接到它使用的库。

到目前为止我已经尝试了以下选项

我。创建 Lib_file.o 后,我尝试了以下命令 g++ -L<include path> -l<.a files> Lib_file.o .执行此命令时,出现以下错误

/usr/lib/../lib64/crt1.o: In function `_start':
init.c:(.text+0x20): undefined reference to `main'
collect2: ld returned 1 exit status

二。我尝试使用 ar 命令将所有必需的 .a 文件与我的 Lib_file.o 一起包含在新存档中。当我尝试在我的应用程序中使用 Lib_file.a 库时,仍然出现 undefined reference 错误

请帮帮我

最佳答案

首先,所有库通常都命名为类似libxyz.a 的名称,其中xyz 是库的名称。

其次,您尝试仅使用您用于库的目标文件创建程序,并将其与自身链接。这当然是行不通的,因为库没有正常程序所需的 main 函数。您必须创建另一个程序,并将那个与库链接。

喜欢

gcc myotherprogram.c -o myotherprogram -L/some/path -lxyz

如您在上面的命令行中所见,我将库 last 放在了命令行中。它是必需的,因为链接器以相反的顺序查找依赖项。

编辑: 将您的静态库与其他库链接:您不需要。静态库是完全独立的,如果它需要其他库本身来工作,那么在编译实际程序时它们必须出现在命令行上。

例如,假设库 xyz 依赖于标准数学库(即 m 库)。在创建 xyz 库时,您不能“链接”它,因为您实际上并没有链接静态库,您只是将目标文件集合放在一个存档中(ar.a 扩展名用于存档)。当您构建需要 xyz 库的实际应用程序时,您还需要链接到 xyz 需要的任何库:

gcc myotherprogram.c -o myotherprogram -L/some/path -lxyz -lm

关于c++ - 用于创建静态库的链接库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12235622/

相关文章:

c++ - “to_string”是't a member of “std”吗?

c++ - 为什么 clang 会自动添加 "cstdio.h"?

c++ - 如何在链表的索引处插入一个值? c++段错误错误

c++ - 与指针一起使用时未声明“开始”

连接因对等套接字写入错误而重置

c - 抓取另一个正在运行的进程的输入/输出 [C,perl]

C++ 删除整个二叉搜索树

c++ - toUTF8String 和本地引用

python - 有没有更好的方法来监控日志文件?(linux/python)

c++ - C++中的 friend 名称解析范围