嵌入式学习笔记之二(静态链接与动态链接)

        要了解静态链接与动态链接,首先要了解什么是静态链接和动态链接,这一部分这里不做讲解,可以去度娘查找。

1.静态链接

静态链接通过静态库进行链接,生成的目标程序中包含运行需要的所有库,可以直接运行,不过就是文件比较大。静态库是汇编产生的.o 文件的集合,一般以.a 文件形式出现。gcc 在使用静态链接的时候需要加上-static 参数。

 2。动态链接

动态链接使用动态链接库进行链接,生成的程序在执行的时候需要加载所需要的动态库才能运行,动态链接程序轻便,但必须依赖动态库。Linux 下的动态链接库实际上是共享目标文件,一般是以.so 文件形式存在。GCC 默认是动态链接不需要加参数。
举例子看一下动态链接库的使用方法。使用 gedit 创建三个 C 语言文件,如下。

 通过两个变量相加的方式来举例说明
mymath.h

 mymath.c

 最后来一个测试文件 test.c(在这里需要注意的一个小细节,调用自己写的.h 文件时,必须使用双引号,“xxxx.h”)

 

 然后就可以编译了,因为 test 引用了 mymath.h,所以不能单独编译,gcc test.c mymath.c 一起进行,否则就就会报错。(如下编译正确)

 接下来是生成动态链接库的方法,gcc -shared xx -o xxx.so,当我们使用Cat 去进行查看的时候会发现,so 文件里全是乱码,这就是使用动态链接库的一个好处,可以防止核心算法的泄露。

 现在就可以秘密将 mymath.c 删除掉了

 

 直接调用库编译发现程序不能运行。

 下面将我们自己建立的库移动到 /usr/lib 目录下试试,然后发现代码运行成功。

结束。 

Guess you like

Origin blog.csdn.net/mainmaster/article/details/121698244