歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> Linux教程 >> Linux下庫文件的創建和使用及其他

Linux下庫文件的創建和使用及其他

日期:2017/2/28 16:46:42   编辑:Linux教程

首先說明一下頭文件、庫文件、庫函數這三個概念的區別。頭文件:即後綴為.h的文件,在其中對變量和函數原型進行了聲明。庫文件:提供有庫函數的文件。一種是靜態連接的後綴為.a的文件,在程序編譯時連接;一種是共享庫,文件後綴為.so,在程序運行的時候才進行連接。庫函數:在庫文件裡提供的函數。

下面,我們用一個實例介紹一下Linux下怎麼樣創建庫文件以及怎麼樣應用庫文件。

文件1: mymath.h

#ifndef MYMATH_H

#define MYMATH_H

int xiangjia(int a,int b);

int xiangjia(int a,int b);

#endif

文件2:xiangjia.c

int xiangjia(int a,int b)

{

return a+b;

}

文件3:xiangjian.c

int xiangjian(int a,int b)

{

return a-b;

}

文件4:main.c

#include "mymath.h"

#include “stdio.h”

int main()

{

printf(“%d”,xiangjia(65,45));

printf(“%d”,xiangjian(65,45));

return 0;

}

無論動態庫還是靜態庫都需要用到.o文件來生成,先編譯生成.o文件。

# gcc -c xiangjia.c xiangjia.c main.c

一、創建靜態庫

靜態庫文件名的命名規范是以lib為前綴,緊接著跟靜態庫名,擴展名為.a。例如:我們將創建的靜態庫名為math56,則靜態庫文件名就是libmath56.a。

# ar cr libmath56.a xiangjia.o xiangjian.o

鏈接靜態庫,生成可執行文件:

#gcc –o math main.o libmath56.a

或者 # gcc –o math main.c –L. –lmath56

執行:

# ./math

110

20

二、利用.o文件創建動態庫

動態庫文件擴展名為.so,使用下面的命令可以生成l ibmath56.so文件。

# gcc -shared -fPCI -o libmath56.so xiangjia.o xiangjia.o

生成可執行文件math2

# gcc –o math2 main.c -L. –lmath56

執行:

# ./math

./math: error while loading shared libraries: libmath56.so: cannot open shared object file: No such file or directory

嘔哦,出錯了!快看看錯誤提示,原來是找不到共享庫文件libmath56.so。程序在運行時,會在/usr/lib和/lib等目錄中查找需要的動態庫文件。若找到,則載入動態庫,否則將提示類似上述錯誤而終止程序運行。

如何找到生成的動態庫有3種方式:

1)把庫拷貝到/usr/lib和/lib目錄下。

(2)在LD_LIBRARY_PATH環境變量中加上庫所在路徑。

例如動態庫libhello.so在/home/example/lib目錄下:

$export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/example/lib

(3) 修改/etc/ld.so.conf文件,把庫所在的路徑加到文件末尾,並執行ldconfig刷新。這樣,加入的目錄下的所有庫文件都可見。

當靜態庫和動態庫同名時, gcc命令將優先使用動態庫。

Copyright © Linux教程網 All Rights Reserved