日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > linux >内容正文

linux

windows 调用linux .a lib,动态链接库及静态链接库(windows下的.dll .lib和linux下的.so .a)...

發布時間:2023/12/10 linux 45 豆豆
生活随笔 收集整理的這篇文章主要介紹了 windows 调用linux .a lib,动态链接库及静态链接库(windows下的.dll .lib和linux下的.so .a)... 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

動態鏈接庫及靜態鏈接庫(windows下的.dll .lib和linux下的.so .a) 庫有動態與靜態兩種,動態通常用.so為后綴,靜態用.a為后綴。例如:libhello.so libhello.a 為了在同一系統中使用不同版本的庫,可以在庫文件名后加上版本號為后綴,例如: libhello.so.1.0,由于程序連接默認以.so為文件后綴名。所以為了使用這些庫,通常使用建立符號連接的方式。

ln -s libhello.so.1.0 libhello.so.1 ln -s libhello.so.1 libhello.so

使用庫

當 要使用靜態的程序庫時,連接器會找出程序所需的函數,然后將它們拷貝到執行文件,由于這種拷貝是完整的,所以一旦連接成功,靜態程序庫也就不再需要了。然 而,對動態庫而言,就不是這樣。動態庫會在執行程序內留下一個標記 指明當程序執行時,首先必須載入這個庫。由于動態庫節省空間,linux下進行連接的 缺省操作是首先連接動態庫,也就是說,如果同時存在靜態和動態庫,不特別指定的話,將與動態庫相連接。

現在假設有一個叫hello的程序開發包,它提供一個靜態庫libhello.a 一個動態庫libhello.so,一個頭文件hello.h,頭文件中提供sayhello()這個函數

/* hello.h */

void sayhello();

另外還有一些說明文檔。這一個典型的程序開發包結構

1.與動態庫連接

linux默認的就是與動態庫連接,下面這段程序testlib.c使用hello庫中的sayhello()函數 /*testlib.c*/

#include

#include

int main()

{

sayhello();

return 0;

}

使用如下命令進行編譯

$gcc -c testlib.c -o testlib.o

用如下命令連接:

$gcc testlib.o -lhello -o testlib

在連接時要注意,假設libhello.o 和libhello.a都在缺省的庫搜索路徑下/usr/lib下,如果在其它位置要加上-L參數

與與靜態庫連接麻煩一些,主要是參數問題。還是上面的例子:

$gcc testlib.o -o testlib -WI,-Bstatic -lhello

注:這個特別的"-WI,-Bstatic"參數,實際上是傳給了連接器ld.

指示它與靜態庫連接,如果系統中只有靜態庫當然就不需要這個參數了。

如果要和多個庫相連接,而每個庫的連接方式不一樣,比如上面的程序既要和libhello進行靜態連接,又要和libbye進行動態連接,其命令應為:

$gcc testlib.o -o testlib -WI,-Bstatic -lhello -WI,-Bdynamic -lbye

3.動態庫的路徑問題

為了讓執行程序順利找到動態庫,有三種方法:

總結

以上是生活随笔為你收集整理的windows 调用linux .a lib,动态链接库及静态链接库(windows下的.dll .lib和linux下的.so .a)...的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。