我在 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/