先看看我们的程序文件,我们的程序主要分为四则运算的头文件和定义文件,以及我们的main文件 arithmetic.c arithmetic.h main.c
首先我们来打包一个动态库, 首先库中存放的是我们的目标文件,将我们生成的目标文件打包。 所以第一步:先生成目标文件: 在生成动态库这里的目标文件时,我们要注意使用 -fPIC 选项生成位置无关代码。这是为了能在多个应用程序中共享这个共享库。
第二步: 生成动态库 我们这里使用的是一个 - -share 选项,用于生成动态库, 因为动态库也是一个共享库,所以是share(我猜的,啊哈哈)
使用库就很简单了,将我们的main函数生成可执行文件并链接我们生成的动态库。 使用gcc -main.c -o main -l库名称 欸?!?按照要求链接我们的库了,但是竟然找不到这个库?这是为什么呢? 这是因为我们链接库的默认路径是在/lib64/下的,而我们的库是在我们当前目录下,所以链接不到,这样很简单,我们将我们生成的库放入/lib64/下就行了。 这样成功链接到我们的动态库,然后生成了可执行文件,我们执行它!!! 得到我们想要的结果,证明成功连接到我们的库了
动态库我们搞定了,接下来看看静态库是如何生成的!
第一步:还是生成目标文件 第二步:我们使用 ar 命令生成我们的静态库:
第三步同样是先把我们的库放入/lib64/下,然后链接即可
解释一下:因为gcc默认链接的是动态库,如果我们直接使用gcc -static main.c -o main -lmy_ari 也是错误的,因为系统下大部分都是动态库,所以就算我们将生成的静态库放入/lib64/下也是不行的,所以我们使用gcc main.c -o main -lmy_ari 用来指定库的查找路径。(前提是得有静态库)
在这里说下库的后缀: 在Linux下: .so 是动态链接库 .a 是静态链接库 在Windows下 .dll 是动态链接库 .lib 是静态链接库