Linux应用编程- 程序地址布局 动态库 静态库

                                                                       一、Linux应用程序地址布局

1.从低地址到高地址分别分:代码段,数据段,BSS段,堆,栈
2.堆是向高地址内存生长的
3.是向低地址内存生长的


4.查看程序内存地址分配
       使用   ps aux 找到进程的PID
       使用命令  cat /proc/(进程的PID)/maps查看内存地址分配\
5.
     代码段具有可读可执行属性
     数据段具有可写属性
6 . 各段的数据存放
       数据段
      全局的  初始化的变量
      全局的   未初始化的变量
      全局的   静态的 初始化的变量
      全局的  静态的 未初始化的变量
BSS段  (readelf  -S  程序名  分析数据段)  BSS段是数据段的一部分
     全局的   没有初始化的   变量
     全局的  静态的 未初始化的变量
     代码段
              代码
            全局常量(const)
            字符串常量
  
         常动态分配的内存
 
       局部的  未初始化的  变量
       局部的  初始化的     变量
      局部的  只读的(const) 变量

                                                                                                              二 、静态函数库的设计
    
                                                                                                    
1. 函数库按照链接方式分为:
                       动态链接库
                       静态链接库
2.linux应用程序函数库的存放目录
           /usr              /usr/lib
 
 以*.so.*命名的   动态函数库
 以*.a*命名的      静态函数库
3.linux下进行编译时,默认使用动态链接库

gcc -static test.c -o test

readelf -d hello  查看使用的库方式
4.制作静态链接库
   
gcc在链接时,只会C函数库,而对于其他库需要使用-l选项来指定

步骤:
       1.gcc -c tax.c
     
   
   
#include<stdio.h>
int tax(int salary ,int insurance)
{
int tax_salary=salary-insurance ;
int tmp=tax_salary-3500;
 
if(tmp<0)
{
printf("you dount need tax\n");
}
if(tmp<=1500)
{
return(tmp*0.03-0);
}
 
if((1500<tmp)&&(tmp<=4500))
{
return (tmp*0.1-150);
}
 
if((4500<tmp)&&(tmp<=9000))
{
 
return (tmp*0.2-555);
}
 
if((9000<tmp)&&(tmp<=35000))
{
 
return (tmp*0.25-1005);
}
if((35000<tmp)&&(tmp<=55000))
{
 
return (tmp*0.3-2755);
}
 
if((55000<tmp)&&(tmp<=80000))
{
 
return (tmp*0.3-5505);
}
 
 
}

       2.ar cqs libtax.a tax.o
       3.将产生的libtax.a复制到 usr/lib/目录下
      4.编写应用程序使用该库
     
   
   
#include<stdio.h>
#include"tax.h"
void main()
{
int my_tax=0;
 
my_tax = tax(9000,1200);
printf("I need tax %d\n",my_tax);
}
5. 使用 gcc -static mytax.c  -ltax -o mytax编译该应用程序
  
                                                                                                           三 、动态态函数库的设计
步骤:
   
    1. gcc -c tax.c
   2.gcc -shared -fPIC tax.o -o libtax.so
  3. .将产生的libtax.so复制到 usr/lib/目录下
  4.编写应用程序使用该库
     
    
    
#include<stdio.h>
#include"tax.h"
void main()
{
int my_tax=0;
 
my_tax = tax(9000,1200);
printf("I need tax %d\n",my_tax);
}
 5. 使用 gcc -static mytax.c  -ltax -o mytax编译该应用程序
                                          



  

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值