繁体   English   中英

链接库以创建静态库

[英]linking library for creating static library

我在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中的代码链接到它使用的库。

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

I.创建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

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

请帮帮我

首先,所有库通常都命名为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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM