首先我们创建一个static_lib.c文件,内容如下:
int add(int a,int b)
{
return a+b;
}
int sub(int a,int b)
{
return a-b;
}
然后在shell中编译该文件,生成一个重定位的目标文件如下:
gcc -c static_lib.c
Linux下使用ar工具创建一个静态库,或者将目标文件加入到已经存在的静态库中
ar rcs 静态库名 目标文件1 目标文件2.....目标文件n
该命令表示将目标文件1-n加入到指定的静态库中。如果该静态库不存在,则创建静态库文件,并且将库文件的拓展名为.a ,其中ar工具的参数rcs起了至关重要的作用。这三个参数分别表示:把列表中的目标文件加入到静态库中(参数r)若指定的静态库不存在,则创建该库文件(参数c);最后更新静态库文件的索引,失之保函新加入的目标文件文件的内容(参数s)
现在需要使用刚刚生成的static.o目标文件创建一个静态库static_lib.a,其执行命令如下:
ar rcs static_lib.a static_lib.o
然后你就能够在目录下看到你创建的静态库了
下面是使用静态库
在vi编辑器中编辑头文件static_lib.h如下:
extern int add(int a,int b);
extern int sub(int a,int b);
然后在vi编辑器中编辑使用库程序: main.c
#include<stdio.h>
#include"static_lib.h"
int main(){
printf("Please input a and b:");
scanf("%d%d",&a,&b);
printf("the add :%d\n",add(a,b));
printf("the sub :%d\n",sub(a,b));
return 0;
}
然后使用命令:
gcc main.c -static ./static_lib.a -o app
动态库也很方便,编译命令是:gcc -shared -fPIC -o share_lib.so static_lib.c
使用时:gcc main.c ./ static_lib.so -o app
分享到:
相关推荐
默认编译是静态库,但考虑到 linux 上动态库使用较多,所以使用 -DBUILD_SHARED_LIBS=ON 参数编译为动态库。 在 centos 7 下使用 gcc 4.8.5 + cmake 3.16.9 编译,包含 bin, include, lib, lib64, share 五个目录,...
详细讲述在Linux系统下如何编译动态库和使用动态库.
Linux系统下使用gcc 5.3编译器编译的boost库1.68版本的动态库和静态库,多线程参数编译,经测试可用
linux下面的库文件有两种:静态链接库(xx.a)和动态链接库(xx.so)。 当一个程序使用静态链 接库,那么当link的时候,连接器会把所需要的函数拷贝到源程序里面,这样,当编译完以后,静态链接库就可以不需要了。如果...
简单的Linux下的静态库和动态链接库的编译方法和使用发发
linux下g++编译与使用静态库和动态库
1.创建共享库 2.编译共享库 1.环境变量
libevent-2.0.22-stable.tar.gz源码编译的Windows和Linux下的静态库,另附源码,电子书《libevent参考手册(中文版).pdf》、《libevent源码深度剖析.pdf》、《LibeventBook.pdf》。 Linux环境下该libevent静态库修改...
在windows环境下,我们通常在IDE如VS的工程中开发C++项目,对于生成和使用静态库(*.lib)与动态库(*.dll)可能都已经比较熟悉,但是,在linux环境下,则是另一套模式,对应的静态库(*.a)与动态库(*.so)的生成...
mqtt linux静态库,动态库,以及html帮助文档。包含man手册
Linux 如何使用gcc生成静态库和动态库,使用GCC编译生成静态库和动态库的方法
由于项目需要,花了一个星期研究,在64位linux下编译出来的cximage两个版本库,静态库以及动态库。亲测,在项目中运行可行
lua-5.2.0静态库+动态库.zip
CentOS7环境下编译的libwebsockets动态库和静态库,经过测试编译的库可以使用
开发项目需要使用1.0.0版本的Openssl的linux上的静态库,使用1.0.2版本Openssl会存在版本问题。...因此,还是自己从https://www.openssl.org/source/old/1.0.0/ 下载源代码,编译静态库软件--libssl.a,libcrypto.a。
在VS2015的平台下编译的GDAL2.4.4库,静态和动态的库都有,可直接使用
函数库分为静态库和动态库两种。 静态库在程序编译时会被连接到目标代码中,程序运行时将不再需要该静态库。动态库在程序编译时并不会被连接到目标代码中,而是在程序运行是才被载入,因此在程序运行时还需要动态库...
本示例演示了需链接动态库静态库,但是不需要编译动态库静态库的makefile编写方式,makefile文件内部有详细的注释,目录下也有介绍文档,希望大家在遇到这种情况时,把本示例稍作修改,就可以运行起来
vs2015动态库编译及调用、vs2015动态库编译Qt5.12.1调用、Qt5.12.1编译动态库android apk调用