linux代码动态分析软件,举例分析Linux动态库和静态库
函数库分为静态库和动态库两种。创建Linux静态库和Linux动态库和使用它们在这里将以举例的形式详述一下。静态库在程序编译时会被连接到目标代码中,程序运行时将不再需要该静态库。动态库在程序编译时并不会被连接到目标代码中,而是在程序运行是才被载入,因此在程序运行时还需要动态库存在。
第1步:编辑得到举例的程序--hello.h、hello.c和main.c;
hello.h(见程序1)为该函数库的头文件。
hello.c(见程序2)是函数库的源程序,其中包含公用函数hello,该函数将在屏幕上输出"Hello XXX!"。
main.c(见程序3)为测试库文件的主程序,在主程序中调用了公用函数hello。
--------------------------------------------------------------------------------
程序1: hello.h
#ifndef HELLO_H
#define HELLO_H
void hello(const char *name);
#endif //HELLO_H
--------------------------------------------------------------------------------
程序2: hello.c
#include
void hello(const char *name)
{
printf("Hello %s!\n", name);
}
--------------------------------------------------------------------------------
程序3: main.c
#include "hello.h"
int main()
{
hello("everyone");
return 0;
}
--------------------------------------------------------------------------------
第2步:将hello.c编译成.o文件
无论静态库,还是动态库,都是由.o文件创建的。因此,我们必须将源程序hello.c通过gcc先编译成.o文件。在系统提示符下键入以下命令得到hello.o文件。
# gcc -c hello.c
第3步:由.o文件创建静态库
静态库文件名的命名规范是以lib为前缀,紧接着跟静态库名,扩展名为.a。例如:我们将创建的静态库名为myhello,则静态库文件名就是libmyhello.a。在创建和使用静态库时,需要注意这点。创建静态库用ar命令。在系统提示符下键入以下命令将创建静态库文件libmyhello.a。
# ar cr libmyhello.a hello.o
第4步:在程序中使用静态库
静态库制作完了,如何使用它内部的函数呢?只需要在使用到这些公用函数的源程序中包含这些公用函数的原型声明,然后在用gcc命令生成目标文件时指明静态库名,gcc将会从静态库中将公用函数连接到目标文件中。注意,gcc会在静态库名前加上前缀lib,然后追加扩展名.a得到的静态库文件名来查找静态库文件。在程序3:main.c中,我们包含了静态库的头文件hello.h,然后在主程序main中直接调用公用函数hello。下面先生成目标程序hello,然后运行hello程序看看结果如何。
# gcc -o hello main.c -L. -lmyhello
# ./hello
Hello everyone!
#
21/212>
linux代码动态分析软件,举例分析Linux动态库和静态库相关推荐
- 举例分析Linux动态库和静态库
转自:http://www.xxlinux.com/newxxlinux/development/gui/2012-01-05/499.html 函数库分为静态库和动态库两种.创建Linux静态库和L ...
- linux 动态库和静态库分析实例
今天忙着编译库文件,中间遇到不少问题,看到这篇文章不错,就转载过来了,后面我会整理下今天的问题,从网上下载了一个开源库,如何进行编译,如何加载到我们的工程中. 今天我们主要来说说Linux系统下基于动 ...
- gcc g++ Linux下动态库_静态库
关于Unix静态库和动态库的分析 基本概念 库有动态与静态两种,动态通常用.so为后缀,静态用.a为后缀. 例如:libhello.so libhello.a 为了在同一系统中使用不同版本的库,可以在 ...
- linux系统中 库分为静态库和,Linux系统中“动态库”和“静态库”那点事儿-【经典好文】...
今天我们主要来说说Linux系统下基于动态库(.so)和静态(.a)的程序那些猫腻.在这之前,我们需要了解一下源代码到可执行程序之间到底发生了什么神奇而美妙的事情. 在linux操作系统中,普遍使用E ...
- Linux 动态库和静态库
From:http://blog.csdn.net/u010977122/article/details/52958330 From:http://blog.163.com/xychenbaihu@y ...
- Linux系统中动态库和静态库的区别
Linux系统中"动态库"和"静态库"那点事儿 今天我们主要来说说Linux系统下基于动态库(.so)和静态(.a)的程序那些猫腻.在这之前,我们需要了解一下源 ...
- Linux系统中的“动态库”和“静态库”
Linux系统中的"动态库"和"静态库" 在Linux操作系统中,普遍使用ELF格式作为可执行程序或者程序生成过程中的中间格式.ELF(Executable a ...
- Linux系统中“动态库”和“静态库”那点事儿
转自:https://blog.csdn.net/u010977122/article/details/52958330#commentBox 今天忙着编译库文件,中间遇到不少问题,看到这篇文章不错, ...
- Linux系统中的动态库和静态库
来源: wjlkoorey258 链接: http://blog.chinaunix.net/uid-23069658-id-3142046.html 今天我们主要来说说Linux系统下基于动态库 ...
最新文章
- e4a编写文件服务器,e4a教程 联云服务器
- springboot多模块打包指定子模块环境配置文件
- mupdf java_mupdf库学习
- Codeforces 482 - Diverse Permutation 构造题
- 会玩!格力公开“磁悬浮床垫”专利
- 终端仿真程序_SecureCRT for mac(终端SSH工具)
- react 树形菜单_react使用antd组件递归实现左侧菜单导航树
- spring在java工程中的运用
- sklearn 神经网络_DeepLearning学习(二):浅层神经网络
- 数据库索引 类型 (转载)
- Linux中文件名解析处理源码分析
- 微信小程序弹出框样式
- OMRON_PLC_CP1H_HostLink通讯协议解析
- PassMark 更新排行,苹果 M1 杀疯了
- FMI飞马网【线上直播】京东POP接口自动化测试
- ESP8266获取心知天气
- 经典算法问题-01-八皇后
- 2013上半年 系统集成项目管理工程师 下午试卷
- 红太狼和灰太狼的囧人爱情
- python字母对应序号_python获取字母在字母表对应位置的几种方法及性能对比较