博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
c语言学习笔记十五
阅读量:5133 次
发布时间:2019-06-13

本文共 1403 字,大约阅读时间需要 4 分钟。

静态库 
 在一定场景下将一些代码编译成一个库文件,以供其他程序使用
 
 示例代码如下:
   20-23文件放在子目录stack中
   test20.c文件:
   char stack[512];
   int top=-1;
 
   test21.c文件:
   extern char stack[512];
   extern int top;
   void push(char c){
         stack[++top]=c;
   }
   test22.c文件:
   extern char stack[512];
   extern int top;
   char pop(void){
return stack[top--]; 
   }
 
   test23.c文件:
   extern char stack[512];
   extern int top;
   int is_empty(void){
  return top==-1;
   }
  
   
   test18.h头文件
   #ifndef STACK_H
   #define STACK_H
   extern void push(char);
   extern char pop(void);
   extern int is_empty(void);
   #endif
   test24.c文件
   #include <stdio.h>
   #include "test18.h"
   
   int main(void){
  push('a');
        return 0;
   }
 
  1 将test20,test21,test22,test23编译成目标文件:
   gcc -c stack/test20.c stack/test21.c stack/test22.c stack/test23.c
  2 然后打包成一个静态库:
     //ar 打包
     //参数r 表示将后面文件添加到文件包中
     //参数s 表示生成静态库
     ar rs libstack.a test20.o test21.o test22.o test23.o   
   3 将编译生成的libstack.a和test24.c编译链接在一起: 
     /*
      * -L.  在当前目录查找库文件
      * -lstack  链接libstack库
      * -Istack  头文件所在目录
      */
     gcc test24.c -L. -lstack -Istack -o test24
     也可以将目标文件一起编译:
     gcc test24.c 
  查看编译器默认会test20.o test21.o test22.o test23.o -Istack -0 test24
  查找的目录:
  gcc -print-search-dirs
  注: 链接共享库和静态库的区别,
       共享库只在运行时作动态链接;
       链接静态库时,链接器会把静态库的目标文件取出来和可执行文件链接在一起
       
      可以使用反江编查看:objdump -d test24
       示例代码如下:
      080483b4 <main>:
        80483b4: 55                   push   %ebp
        80483b5: 89 e5                 mov    %esp,%ebp  
      080483d0 <push>:
        80483d0: 55                   push   %ebp
        80483d1: 89 e5                 mov    %esp,%ebp
        80483d3: 83 ec 04             sub    $0x4,%esp

转载于:https://www.cnblogs.com/retacn-yue/archive/2012/09/21/2761210.html

你可能感兴趣的文章
用户空间与内核空间,进程上下文与中断上下文[总结]
查看>>
JAVA开发环境搭建
查看>>
Visual Studio基于CMake配置opencv1.0.0、opencv2.2
查看>>
SDN第四次作业
查看>>
django迁移数据库错误
查看>>
Data truncation: Out of range value for column 'Quality' at row 1
查看>>
字符串处理
查看>>
HtmlUnitDriver 网页内容动态抓取
查看>>
ad logon hour
查看>>
罗马数字与阿拉伯数字转换
查看>>
Eclipse 反编译之 JadClipse
查看>>
距离公式汇总以及Python实现
查看>>
Linux内核态、用户态简介与IntelCPU特权级别--Ring0-3
查看>>
第23月第24天 git命令 .git-credentials git rm --cached git stash clear
查看>>
java SE :标准输入/输出
查看>>
[ JAVA编程 ] double类型计算精度丢失问题及解决方法
查看>>
好玩的-记最近玩的几个经典ipad ios游戏
查看>>
PyQt5--EventSender
查看>>
Sql Server 中由数字转换为指定长度的字符串
查看>>
tmux的简单快捷键
查看>>