1. 程式人生 > >Linux下測試使用lib.so

Linux下測試使用lib.so

--2017-01-04上次測試-I -L 有起作用。今天意外不行,所以就只能放在同一個目錄下面或者通過軟連線(ln -s  source destination)或硬連線(ln source destination)

mv libmy.so  inh/

http://www.cnblogs.com/wancy86/p/linux_inode.html       rm -rf symbolic_name刪除

通過find / -name libmy.so  可以找到實時的位置./mydll/inh/ilbmy.so

但是通過locate libmy.so 找到的是 舊位置/mydll/libmy.so具體情況尚不清楚(雖然看到看到說locate是非實時位置)

==============================================================

-I.       #大寫i 標頭檔案目錄/位置[.h] #include<...> 或者 #include"..."  若在同一目錄下,<>必須有此項,""可以無此項   eg:   -I./inc   -I.

-L.    #動態庫lib.so目錄/位置[.dll]  eg:  -L./lib     -L.

-l     #小寫的L用到的動態庫  eg:生成的檔名為libname.so  使用 -lname

***********************************

原始檔

myso.h

#ifndef _MYSO_H
#define _MYSO_H
extern int add(int,int);
extern int dec(int ,int);
extern int axb(int,int);
#endif

add.c

#include"myso.h"
int add(int x,int y)
{
 return (x+y);
}


dec.c

#include"myso.h"
int dec(int x,int y)
{
 return (x-y);
}


axb.c

#include"myso.h"
int axb(int x,int y)
{
 return (x*y);
}

shell批處理指令碼

filename: th.sh

#!/bin/bash
gcc add.c dec.c axb.c -fPIC -shared -o libmy.so

***********************************

//使用該動態庫 #include<> 同目錄下必須有-I.

compile:  gcc fur.c -I. -L. -lmy  -o XJY

run1:          ./XJY

run2:           XJY

fur.c

#include<stdio.h>
#include<myso.h>
int main()
{
  printf("1+2=%d 2-3=%d 5*6=%d\n",add(1,2),dec(2,3),axb(5,6));
  return 0;
}

***********************************

//使用該動態庫 #include""同目錄下可以無-I.

compile: gcc fur.c -L.  -lmy  -o XJY

run1:         ./XJY  

run2:        XJY

fur.c

#include<stdio.h>
#include"myso.h"
int main()
{
  printf("1+2=%d 2-3=%d 5*6=%d\n",add(1,2),dec(2,3),axb(5,6));
  return 0;
}

***********************************

//使用該動態庫 無引用標頭檔案 直接連結不報錯(分開編譯連結會 warning)

compile: gcc fur.c   -L.  -lmy  -o XJY

run1:         ./XJY  

run2:        XJY

#include<stdio.h>
int main()
{
  printf("1+2=%d 2-3=%d 5*6=%d\n",add(1,2),dec(2,3),axb(5,6));
  return 0;
}