C/C 动/静 态库

c语言由文本到二进制的过程 编译 -> 汇编 -> 链接

动态库是程序链接的时候被链接,使用动态库的好处:

-如果多个程序使用同一个动态库,如果动态库出现bug,不需要升级所用该动态库的程序,只要升级该动态库。

-该动态库只有这一个,没有其他副本,节省内存空间

静态库是编译的时候被载入,使用静态库的好处:

-使用静态库编译好的 程序在任何机器上都可以直接运行。

-如果有多个程序使用该静态库,如果升级该静态库,使用该静态库的所有的软件都要重新编译。

在使用动态库的时候,经常会出现动态库未被发现:undefined reference to ‘函数名’

ldd  可执行文件  #查看哪个库没有被发现

解决方法

以把当前路径加入

#vim   /etc/ld.so.conf
 1 include ld.so.conf.d/*.conf
 2 /usr/local/gcc/gmp-4.3.2/lib
 3 /usr/local/gcc/mpfr-2.4.2/lib
 4 /usr/local/gccc/mpc-0.8.1/lib
 5 /home/xiaowei/metad/dev/metad/plugins/netflow_v9/src

然后:

#ldconfig

在使用的时候:

gcc -fPIC -shared libaa.so aa.c
gcc -o  list list.c  -L.   -laa
-L:表示共享库路径

静态库

#gcc -c hello.c 这里没有使用-shared选项

#ar -r libhello.a hello.o

在程序中链接静态库

#gcc test.c -lhello -L. -static -o hello.static

时间: 2024-10-07 18:36:34

C/C 动/静 态库的相关文章

白盒、黑盒、灰盒、动(静)态分析、人工(自动化)测试

白盒测试 单元测试:一般用白盒测试(依据<详细设计说明书>LLD) 集成测试:一般用灰盒测试(依据<概要设计说明书>HLD) 系统测试:一般用黑盒测试(依据<需求规格说明书>SRS) 白盒测试:基于程序结构的逻辑驱动测试.(透明盒) 为什么进行白盒测试? 白盒测试在前期,使前期逻辑覆盖率达到一定指标,是软件内部逻辑结构问题能基本得到消除. 保证逻辑结构达到一定覆盖程度,给予软件代码质量更大的保证 白盒测试发现问题后解决成本较低 白盒测试的常用技术 白盒测试一般会用到静态

p&#8203;h&#8203;p&#8203;配&#8203;置&#8203;伪&#8203;静&#8203;态&#8203;

1.检测Apache是否支持mod_rewrite 通过php提供的phpinfo()函数查看环境配置,通过Ctrl+F查找到"Loaded Modules",其中列出了所有apache2handler已经开启的模块,如果里面包括"mod_rewrite",则已经支持,不再需要继续设置. 如果没有开启"mod_rewrite",则打开目录 您的apache安装目录"/apache/conf/" 下的 httpd.conf 文件

iOS-静态库的创建与使用

在日常项目开发中,不论是为了两个公司项目上的业务交流还是为了减少项目的编译时间,有的时候我们会把项目中的私密内容打包成静态库,或者是把项目中变动较少一部分打包成静态库以便提高编译效率,那么下面我们就来学习一下"iOS-静态库的创建与使用": (一)iOS静态库.动态库与Framework静态库与动态库的区别: (1)什么是库? 库(Library)直白一点说就是一段编译好的二进制代码,加上头文件就可以供别人使用;(例如: iOS中Objective-C编译下的.h和.m文件,打包静态库

Linux环境编程编译工具与动态态库

linux环境下的编译器gcc gcc: -o               编译链接生成可执行文件 -O  -O1 -O2 -O3  编译优化 -g  -g1 -g2 -g3 产生调试信息至可执行文件 -w  关闭所有的警告 -W  all,error     -Wall显示所有的警告 -Werror把所有的警告当错误 -c  编译生成目标文件  不链接 -E 预编译 -S 编译成汇编 -D 在命令行中添加宏定义 -x 指定语言的编译类型   gcc -x c xxxx.c   gcc -x a

编译在arm板上使用的sqlite3的静动态库

采用的是sqlite-autoconf-3080002.tar.gz 解压 tar xvf sqlite-autoconf-3080002.tar.gz 进入 cd sqlite-autoconf-3080002/ 采用的是 arm-none-linux-gnueabi-gcc(g++)编译. ./configure --host=arm-none-linux-gnueabi --prefix=/home/liukang/sqlite-arm-linux LD=arm-none-linux-gn

iOS-静态库,动态库,framework浅析(二)

创建.a静态库 第一步,新建工程.     一般使用工程名就使用库的名称,比如我这里用FMDB来创建静态库,我的工程名就取名为FMDB,创建的.a静态库就是libFMDB.a. 使用静态库模板新建工程.png 创建的工程.png 第二步,删除系统默认创建的[FMDB.h]和[FMDB.m]文件,导入需要打包的源文件. 导入源文件后.png 第三步(方式一),修改项目配置 修改配置.png 点击上图中的[3],弹出的列表中选择[New Headers Phase],打开[Headers (0 it

CMake--静态库与动态库构建

小结内容 建立一个静态库和动态库,提供 HelloFunc 函数供其他程序编程使用, HelloFunc 向终端输出Hello World 字符串. 安装头文件与共享库. 1.代码与CMakeList.txt文件编写 首先建立 t3 目录,用于存放本节涉及到的工程 t3目录下创建lib目录用来存代码 在 t3 目录下建立 CMakeLists.txt , PROJECT(HELLOLIB) ADD_SUBDIRECTORY(lib) #SET(LIBRARY_OUTPUT_PATH < 路径 >

[转]Linux下用gcc/g++生成静态库和动态库(Z)

Linux下用gcc/g++生成静态库和动态库(Z) 2012-07-24 16:45:10|  分类: linux |  标签:链接库  linux  g++  gcc  |举报|字号 订阅 在 linux 下,库文件一般放在 /usr/lib 和 /lib 下, 静态库的名字一般为 libxxxx.a ,其中 xxxx 是该 lib 的名称 动态库的名字一般为 libxxxx.so.major.minor , xxxx 是该 lib 的名称, major 是主版本号, minor 是副版本号

静态库和共享库制作

 1静态库和共享库 *本节就如何创建和使用程序库进行论述.所谓"程序库",简单说,就是包含了数据 和执行码的文件.其不能单独执行,可以作为其它执行程序的一部分来完成某些功能.库的 存在,可以使得程序模块化,可以加快程序的再编译,可以实现代码重用,可以使得程序便 于升级.程序库可分静态库(static library)和共享库(shared object). A:静态库 是在可执行程序运行前就已经加入到执行码中,成为执行程序的一部分:共享库,是在 执行程序启动时加载到执行程序中,可以