zoukankan      html  css  js  c++  java
  • 再探动态库的应用

    代码:

    //file:addVec.c
    
    #include "vector.h"                                                                       
    
    int gVal = 200;        //变量的定义与初始化,在大他区域
    int gVal2 = 1;         //变量的定义,在bss区域
    int addVec(int *xP, int *yP, int *zP, int Num){ 
      for(int i = 0; i < Num; i++){
        zP[i]
    = xP[i] + yP[i];
      }
    gVal
    += Num;

    return gVal + gVal2;
    }

    //vector.h
    #ifndef vector_h
    #define vector_h
    int addVec(int *xP, int *yP, int *zP, int Num);
    void mulVec(int *xP, int *yP, int *zP, int Num);
    #endif

    //mulVector.c
    #include "vector.h"
    void mulVec(int *xP, int *yP, int *zP, int Num){
      for(int i = 0; i < Num; i++){
        zP[i]
    = xP[i] * yP[i];
      }

    return;
    }

    //testVec.c
    #include <stdio.h>
    #include
    "vector.h"
    int x[2] = {1, 2};
    int y[2] = {3, 4};
    int z[2];

    extern int gVal;           //变量的声明,只能一次定义,可以多次声明
    extern int gVal2;           //声明一个变量,在其他地方定义的变量

    int main(int argc, char **argv)
    {
      addVec(x, y, z,
    2);
      printf(
    "z = [%d %d] ", z[0], z[1]);

      return gVal + gVal2;
    }

    编译动态库:gcc -shared -fPIC -o libVector.so addVec.c mulVec.c

    用动态库编译:gcc -g -I. -L. -lVector testVec.o -o testVec

    修改变量:LD_LIBRARY_PATH

      LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$PWD/.

      echo $LD_LIBRARY_PATH  结果::/home/nication/WORKM/studyCode/gnuC/chapter04/lib/shared2/. 没有问题

      export LD_LIBRARY_PATH

    执行:./testVec

    结果:z = [4 6]

    查看返回变量:echo  $? 值为203 正常OK

    后续,需要调试时,总是出现断点无法设置在动态库内的情况,在gdb启动后,使用catch load 库名,载入库文件
    具体为:

      先catch load libVector.so载入库

      再设置断点

      然后进入库中的函数就可以普通调试

     在其他文件中定义的变量,如果需要在另外一个文件中使用时,必须加上extern表明为二次声明

      

  • 相关阅读:
    【设计模式】—— 单例模式Singleton
    【java开发系列】—— 深克隆和浅克隆
    【设计模式】—— 原型模式Prototype
    ArcMap 导入Excel坐标数据
    如何将XML文件导入Excel中
    ArcGIS API for Javascript之专题图的制作(四)热力图渲染(上)
    ArcGIS js api 手动构建FeatureLayer
    word怎样从第三页开始设置页码
    ArcGIS API for JS4.7加载FeatureLayer,点击弹出信息并高亮显示
    [转载]ArcGIS SERVER 9.3如何清除REST缓存
  • 原文地址:https://www.cnblogs.com/guochaoxxl/p/14202477.html
Copyright © 2011-2022 走看看