linux中动态链接库用扩展名,Linux操作系统下动态库的生成及链接方法是什么?...
Linux下動態庫文件的擴展名為"。so"(Shared Object)。按照約定,所有動態庫文件名的形式是libname。so(可能在名字中加入版本號)。這樣,線程函數庫被稱作libthread。so。靜態庫的文件名形式是libname。a。
共享archive的文件名形式是libname。sa。共享archive只是一種過渡形式,幫助人們從靜態庫轉變到動態庫。
本文僅以簡單的例子介紹動態庫文件的生成和鏈接方法。
操作系統:Debian/GNU Linux 2。6。21-2-686; GCC版本:4。
1。3
一、庫文件及測試文件代碼
庫文件及測試文件所在的目錄:/home/program/。
1。庫文件名:myfunction。c/*Author: Godbach
E-mail: nylzhaowei@163。com*/#include intmy_lib_function (void){
printf ("Library routine called from libmyfunction。
so!\n");
return 0;}
2。測試文件名:test。c#include int main(void){
my_lib_function();
return 0;}
二、動態庫的編譯方法
編譯庫文件myfunction。
c:debian:/home/program# gcc -shared -o libmyfunction。so myfunction。c
如果編譯成功,會在/home/program/下生成動態庫文件:libmyfunction。so。
這里有兩點需要說明:
1。
對Linux操作,一般都推薦在普通用戶模式下,如果需要超級用戶的權限,則可以通過su root,輸入root用戶密碼切換。我是個人學習使用,同時又有很多的操作都要使用root用戶,因此就直接在root用戶下進行編譯。
2。編譯生成動態庫的命令為:gcc (-fpic) -shared -o libmyfunction。
so myfunction。c
-fpic 使輸出的對象模塊是按照可重定位地址方式生成的。
-shared指定把對應的源文件生成對應的動態鏈接庫文件。
三、動態庫的測試方法
編譯測試文件test。c:debian:/home/program# gcc -o test test。
c /home/program/libmyfunction。so
成功編譯后,生成test文件,運行test:debian:/home/program# 。/test Library routine called from libmyfunction。
so!
其中,gcc -o test test。c /home/program/libmyfunction。so的最后一個參數指定所鏈接庫文件的絕對路徑。本例中庫文件的絕對路徑為:/home/program/libmyfunction。so。
當然,如果想從系統的庫文件路徑(通常系統函數庫的位于/usr/lib下)鏈接動態庫的話,可以先將生成的庫文件拷貝至/usr/lib/下,然后再鏈接:debian:/home/program# cp libmyfunction。so /usr/lib/debian:/home/program# gcc -o test test。
c -lmyfunctiondebian:/home/program# 。/test Library routine called from libmyfunction。so!
這里,對于鏈接的方法作一下解釋。對于gcc -o test test。
c -lmyfunction中最后一個參數-lmyfunction, 可見傳給C編譯器的命令行參數并未提到函數庫的完整路徑名,甚至沒有提到在函數庫目錄中該文件的完整名字!實際上,編譯器被告知根據選項-lmyfunction鏈接到相應的函數庫(/usr/lib下),函數庫的名字是libmyfunction。
so, 也就是說,"lib"部分和文件的擴展名被省略了,但在前面加了一個l。
全部
總結
以上是生活随笔為你收集整理的linux中动态链接库用扩展名,Linux操作系统下动态库的生成及链接方法是什么?...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: linux看门狗设备,基于Linux构建
- 下一篇: linux内核grub的作用与用途,li