• gcc创建静态库和共享库


    静态库和动态(共享)库
    静态库:编译程序在编译使用库提供的功能代码的程序时将代码复制到该程序然后编译成可执行程序,这种库成为静态库
    共享库:共享库比静态库的处理方式更加灵活,因而其产生的可执行文件更小,其文件后缀为 .so,代表共享对象(shared object)
       使用共享库链接的可执行程序只包含了它所需要的函数的表格,并没有从目标文件中复制全部的外部函数的机器代码
      在可执行文件开始执行时,操作系统将外部函数的机器代码从磁盘上的共享文件复制到内存中,这个过程称为动态链接。
      它使可执行文件更加精简而且节省磁盘空间,这是因为共享库可在多个程序间共享
      操作系统允许物理内存中共享库的一个复制被所有正在运行的程序使用,因此能节省内存
      共享库使得程序员可根据需要随时跟新库文件,只要接口不变,那么使用它的源程序就不需要重新编译
      基于这些优点,当系统中同时存在共享库和静态库时,gcc会默认使用共享库文件

    当使用lname选项指定库名称时,gcc首先搜索在路径中是否有libname.so文件,如果有则使用该文件,如果没有,则继续查找是否有
    libname.a静态库文件
    GCC创建静态库文件方法

    calc.h
    int aver(int,int);
    int sum(int,int);
    aver.c
    #include "calc.h"
    int aver(int num1,int num2)
    {
        return (num1+num2)/2;
    }
    sum.c
    #include "calc.h"
    int sum(int num1,int num2)
    {
        return (num1+num2);
    }
    mian.c
    #include <stdio.h>
    #include "calc.h"
    
    int main(){
        int v1,v2,m,sum2;
        v1=12;
        v2=10;
        m=aver(v1,v2);
        sum2=sum(v1,v2);
        printf("aver(%d,%d)=%d
    ",v1,v2,m );
        printf("sum(%d,%d)=%d
    ",v1,v2,sum2 );
    
    }

    编译为目标文件而不进行汇编和链接
    gcc -c -o aver.o aver.c
    gcc -c -o sum.o sum.c
    ar rc libmycalc.a aver.o sum.o
    gcc main.c -static -L. -lmycalc -o static-main

    linux环境下gcc静态编译/usr/bin/ld: cannot find -lc错误原因及解决方法
    原因:
    一般出现这个问题的时候,Makefile中肯定有-static选项。这其实是静态链接时没有找到libc.a
    需要安装glibc-static.xxx.rpm,如glibc-static-2.12-1.107.el6_4.2.i686.rpm,或是yum install glibc-static

    GCC创建共享库文件方法

    gcc -c -fPIC aver.c -o aver.o
    gcc -c -fPIC sum.c -o sum.o
    gcc -shared -o libmycalc.so aver.o sum.o
    gcc main.c -L. -lmycalc -o shared-main
    执行shared-main之前
    vim /etc/profile
    加上
    export LD_LIBRARY_PATH=.
    . /etc/profile
    shared-main比static-main小的多

     

  • 相关阅读:
    【RL-TCPnet网络教程】第3章 初学RL-TCPnet的准备工作及其快速上手
    【二代示波器教程】第15章 FreeRTOS操作系统版本二代示波器实现
    【RL-TCPnet网络教程】第2章 嵌入式网络协议栈基础知识
    【二代示波器教程】第14章 uCOS-III操作系统版本二代示波器实现
    【RL-TCPnet网络教程】第1章 当前主流的小型嵌入式网络协议栈
    徐州网络赛H-Ryuji doesn't want to study【线段树】
    徐州网络赛F-Feature Trace【暴力】
    徐州网络赛C-Cacti Lottery【DFS】
    南京网络赛I-Skr【回文树模板】
    AC自动机
  • 原文地址:https://www.cnblogs.com/HKUI/p/8922396.html
Copyright © 2020-2023  润新知