Linux动静态库的制作和使用详解

 2024-02-23 03:04:00  阅读 0

Linux 应用程序开发

通常有三个问题需要考虑,分别是:1)在Linux应用开发过程中,不同Linux版本下标准库链接不兼容的问题;2)在制作Linux静态库的过程中,发现它与下一个静态库的制作方法不同;3)当Linux应用程序链接到第三方库或其他静态库时,会发现链接顺序的烦人问题。本文将重点介绍这三个问题,重点介绍 Linux 下标准库的链接以及如何智能构建 (*.a)。

需要了解的两件基本事情

由于大量的Linux

版本及其独立性,Linux应用在工程生产和使用中必须精通以下两点,才能有效工作和理想运行。在

Linux 下,有三种方法可以链接到标准库(完全静态、半静态 (,++)、完全动态)及其各自的优缺点。

如何在 Linux (*.a) 下巧妙地构建,以及如何设置链接选项来解决 gcc 更具体的链接库的顺序问题。

三种标准库链接方法的选项和比较

为了说明最终应用的三种不同标准库链接方法之间的区别,这里使用了一个经典的示例应用,参见清单 1。

清单 1

#

#

使用 std::cout;

使用 std::endl;int

main(int argc, char* argv[])(

“!(由 )\n“);

cout ar.mac

echo END >> ar.macar -

M < ar.mac

ar -q demo.a .o

echo OPEN demo.a > ar.mac

echo xml.a >> ar.mac

echo SAVE >> ar.mac

echo END >> ar.macar

-M < ar.mac

rm ar.mac

如果你想在 Linux 中使用 ar 脚本创建一个静态库,你可以编写清单 3 中所示的代码

清单 3$(如果 $( $@

),@$(RM) $@)$(如果 $(

ar.mac),@$(RM) ar.mac)$(

如果 $( %.a, $^),@

echo $ar.mac

@ echo 保存 >> ar.mac

@ echo echo END >> ar.mac@$(AR) -M < ar.mac $(if $( %.o,$^),@$(

AR) -q $@ $( %.o, $^))$(

如果 $( %.a, $^),

@ echo OPEN $ar.mac

$( LIB, $( %.a, $^),

@ echo $(LIB) >> ar.mac

@ echo 保存 >> ar.mac

@ echo END >> ar.mac

@$(AR) -M < ar.mac

@$(RM) ar.mac

endef (英语)$(

)/$():$(OBJS)

$()

从图 9 中可以看出,以这种方式生成的 demo.a 就是我们想要的。

图 9.巧妙地创建静态库文件结果

linux 动态库环境变量_linux环境变量生效顺序_linux动态库全局变量

Linux静态库链接顺序问题及解决方法:

正如 GCC 手册中提到的:

它使你写这个的地方;

和 和 文件按它们的顺序排列。

因此,'foo.o -lz bar.o ' ' z ' 在文件 ' foo.o ' 之后,但'

bar.o'。如果 'bar.o ' 到 'z' 中,则 可能 不是 。

为了

解决这个库链接顺序问题,我们需要添加一些链接选项:$(CXX) $() $(OBJS) - “-(” $

(LIBS) - “-)” -o $@通过把所有需要链接的静态库

放在-“-(”和-“-)”之间,可以是一个G++链接进程,自动循环所有静态库,从而解决了原有的链接顺序问题。

涉及链接选项:-

-

作为 传递给 .您可以使用它来 -

哪个 GCC 不知道该怎么做.

总结

本文介绍了 Linux 下三个标准库的链接方式及其优缺点,也介绍了 Linux 下静态库的创建和使用,希望能为大多数需要部署 Linux 应用和编写 Linux 的工程师提供有用的帮助。

标签: 链接 静态 应用

如本站内容信息有侵犯到您的权益请联系我们删除,谢谢!!


Copyright © 2020 All Rights Reserved 京ICP5741267-1号 统计代码