【发布时间】:2012-09-02 11:32:44
【问题描述】:
我在 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 。在执行此命令时,我收到以下错误
二。我尝试使用 ar 命令将所有必要的 .a 文件与我的 Lib_file.o 一起包含在新存档中。当我尝试将 Lib_file.a 库与我的应用程序一起使用时,我仍然收到未定义的引用错误
请帮帮我
【问题讨论】:
-
我强烈建议制作共享库,而不是静态库。见stackoverflow.com/a/12197285/841108
-
在 Linux 上,.a 文件只是一个包含一堆 .o 文件(已编译但未链接)的便捷存档。它没有元数据。与 .a 文件链接基本上与单独与 .o 文件链接相同。至于 .o 文件,.a 文件没有办法指明它们的外部依赖库。您需要在构建系统中单独跟踪它,并在链接时将信息提供给链接器。
-
@BasileStarynkevitch :感谢您的有用帖子