步骤一:编译子程序hello.h hello.c main.c
首先创建一个文件夹zy1(作业1)
cd进入作业1后使用vim编写源代码
编写三个代码内容如下
编写代码完成后点击键盘的esc键退出编辑,再按下 shift + ;键终端左下角提示输入后输入 wq 后按空格键输入文件名即可回车退出编辑
创建完成输入ls查看文件
步骤二:将hello.c编译成.o文件
输入命令gcc -c hello.c并通过命令ls查看文件是否生成
步骤三:由.o文件创建静态库
静态库的文件命名都是以lib为前缀,拓展名为.a,例如生成一个名为hello的静态库,则静态库文件名为libhello.a。
创建静态库通过命令ar执行
ls查看生成的文件
步骤四:在程序中使用静态库
输入命令gcc -o hello main.c -L -lmyhello
回车后输入./hello即可看到输出
步骤五:由.o文件创建动态库文件
动态库文件的命名也是前缀为lib,但拓展名使用的是.so。
例如创建动态库名为hello则生成的动态库文件名为libhello.so。下面为创建名为myhello的动态库
gcc -shared -iPIC -o libmyhello.so hello.o
并输入ls查看文件是否成功生成
步骤六:在程序中使用动态库
先运行gcc命令生成目标文件,在试着运行动态库:
gcc -o hello main.c -L -lmyhello
回车后输入./hello
这时会提示报错,原因是程序在运行时,会在usr/lib和/lib等目录中寻找相应的动态文件,而我们的libhello.so不在usr/lib目录中,故出现提示报错
我们可以mv libmyhello.so /use/lib
把动态库文件转移到目录/usr/lib中
然后再输入./hello回车
这样就能正确的使用动态库了。
拓展:当静态库和动态库同名时,gcc命令会如何处理运行
首先删除除了.c 和.h以外的所有文件
在创建静态库文件libmyhello.a和动态库文件libhello.so
然后运行
可以知道,当静态库和动态库同名时,gcc命令将优先使用动态库,我们可以把动态库文件转移到/usr/lib中,看看能否成功运行
运行成功!