一、执行程序是如何被组装的?
1)、用gcc生成静态库和动态库
1、先编译三个例子程序hello.h、hello.c、main.c
(1)、先创建一个文件夹用来保存这次作业,代码如下:
1 mkdir test1
2 cd test1 //进入该目录
(2)、分别编写三个程序
使用以下命令进行程序编写
vim hello.h
以下是三个例子程序的代码:
hello.h
1 #ifndef HELLO_H
2 #define HELLO_H
3 void hello(const char *name);
4 #endif //HELLO_H
hello.c
1 #include <stdio.h>
2 void hello(const char *name)
3 {
4 printf("Hello %s!\n", name);
5 }
main.c
1 #include "hello.h"
2 int main()
3 {
4 hello("everyone"); return 0;
5 }
2、将hello.c编译成.o文件,并由.o文件创建静态库
(1)、通过以下命令将hello,c先编译成.o文件,并查看是否生成了hello.o文件
gcc -c hello.c
(2)、由.o文件创建静态库,并查看结果:
ar -crv libmyhello.a hello.o
ls
3、在程序中使用静态库
方法一:
gcc -o hello mian.c -L. -lmyhello
方法二:
gcc main.c libmyhello.a -o hello
方法三:
(1)、先生成main.o文件,代码如下:
gcc -c main.c
(2)、再生成可执行文件,代码如下:
gcc -o hello main.o libmyhello.a
(3)、运行hello程序以检查,然后删除静态库文件检查hello是否真的连接到目标文件hello中
1 ./hello
2
3 rm libmyhello.a
4 ls //检查是否已经移出
5 ./hello
程序照常运行,证明其以连接到目标文件中
4、由.o文件 创建动态库文件
5、在程序中使用动态库
(1)、用gcc生成目标文件然后运行查看结果
注意:(1)、其中运行过程中出现错误,因为程序运行是在/usr/bin查找动态库文件,所以我们需要将libmyhello.so文件复制到该目录中。
(2)、权限不够需要获取root权限。
输入以下代码,即可解决:
su root
mv libmyhello.so /usr/lib
(2)、先删除.c和.h文件,恢复成刚编辑完举例程序的状态,在创建静态库文件libmyhello.a和动态库文件libmyhello.so,并运行hello,其中错误参照前面方法解决
2)、静态库.a与.so库文件的生成与使用
1、先编译四个程序A1.c、A2.c、A.h、test.c
(1)、先创建一个文件夹用来保