1. 程式人生 > 實用技巧 >再探動態庫的應用

再探動態庫的應用

程式碼:

//file:addVec.c

#include "vector.h"                                                                       

int gVal = 200;
int gVal2 = 1;

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]\n", 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