1

我在 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 选项在其他代码中使用这个库时,我得到未定义的引用错误。此错误指向我的 Lib_file.o 中的代码。所以我的问题是如何让我的 Lib_file.cpp 中的代码链接到它使用的库。

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

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

/usr/lib/../lib64/crt1.o:在函数“_start”中:
init.c:(.text+0x20): undefined reference to `main'
collect2: ld 返回 1 个退出状态

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

请帮帮我

4

1 回答 1

4

首先,所有库通常都被命名为库的名称libxyz.a在哪里xyz

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

喜欢

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

正如您在上面的命令行中看到的那样,我将库放在命令行的最后。这是必需的,因为链接器以相反的顺序查找依赖项。

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

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

gcc myotherprogram.c -o myotherprogram -L/some/path -lxyz -lm
于 2012-09-02T11:41:28.693 回答