• linux中建立自己的静态库 动态库并使用


    库依赖:
    gcc connect.c –o connect –I /usr/include/mysql –L /usr/lib/mysql -lmysqlclient
    //-I是找到自己写的头文件所在的位置 -L是找到自己所写的动态库所在的位置,并且写上函数名,静态库不用写-L,只写函数名//-I 是i 的大写

    先编译一边,会发现报错,然后解析一下,没有包含头文件

    添加上头文件-I /usr/local/include/mysql后,在编一下,发现还有函数没有识别出来,是因为没有包含相应的库文件。

    然后将库文件添加上以后,在进行编译发现问题搞定了


    这些操作都是在test的文件夹下做的,如果不是的话,用-I 和-L -I来找到头文件的的位置,-L和动态库的位置,

    //在test的文件夹下有 main.c xiangjia.c xianjian.c xiangjia.h xiangjian.h//都是自己写的

    main.c中

    #include <stdio.h>//正常写法
    #include "mymath.h"//自己定义的
    int main()
    { 
      int t=xiangjia(65,4);
      int z=xiangjian(45,2);
      printf("%d %d
    ",t,z);
      return 0;
    }

    xiangjia.c中

    int xiangjia(int a,int b)
    {
      return a+b:
    }

    xiangjian.c中

    int xiangjian.(int a,int b)
    {
      return a-b;
    }

    mymath.h中

    #ifndef MYMATH_H   //如果没有定义这个头文件
    #define MYMATH_H  //那么定这个
      int xiangjian(int a,int b);//xxx.c中的函数的声明
      int xiangjia(int a,int b);
    #endif

    静态操作
    [root@localhost test]# gcc -c main.c xiangjia.c xiangjian.c //然后对所有的.c文件进行转换,变成.o目标文件
    [root@localhost test]# ar cr libmylib.a xiangjian.o xiangjia.o //然后用ar cr 对.o文件进行操作,转换成静态库,并起个名字,格式:libxxxx.a
    [root@localhost test]# gcc -o mylib main.o libmylib.a //然后,使用-o对main.o 和已经生成的静态库libxxxxx.a重命名,
    [root@localhost test]# ./mylib //然后找到重命名的文件进行测试,运行 :/找到路径/名字
    110
    20


    动态操作
    [root@localhost test]# gcc -shared -fPCI -o libmyname.so xiangjian.o xiangjia.o //使用这个命令,对静态所生成的函数目标文件,进行重命名,格式:libxxxxx.so

    [root@localhost test]# cp -r libmyname.so /lib //然后复制所生成的libxxxxx.so即动态文件到 /lib文件夹下

    [root@localhost Desktop]# gcc -o mymath ./test/main.c -L /lib/ -lmyname //然后对/路径/main.c 重命名 为 xxxxxx(mymath),并使用-L 找到/lib/ -lxxxx(即libxxxxx.so的缩写),添加这个路径
    [root@localhost Desktop]# ./mymath
    110
    20
    [root@localhost Desktop]#

  • 相关阅读:
    IBM X System ServerGuide 8.41 服务器 系统安装 引导盘
    oracle查找重复记录
    linux的nohup命令的用法。
    最佳设计工作流
    开发的浏览器颠覆微软,引爆了一场互联网大战
    程序员的成长和代码行数的关系
    Oracle SQL Developer 连接 MySQL
    Linux 如何打开端口
    SQLSERVER中如何快速比较两张表的不一样
    我所理解的MVVM
  • 原文地址:https://www.cnblogs.com/NirobertEinteson/p/10219224.html
Copyright © 2020-2023  润新知