導航:首頁 > 編程系統 > linuxa生成so

linuxa生成so

發布時間:2021-12-07 12:49:36

linux下怎麼 調用 和生成 靜態庫

Linux庫有動態與靜態兩種,動態通常用.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.c為例,生成hello庫: /* hello.c */ #include void sayhello() { printf("hello,world\n"); } 用gcc編繹該文件,在編繹時可以使用任何全法的編繹參數,例如-g加入調試代碼等

Ⅱ linux生成文件中.so 文件和.out文件的區別

.so是二進制格式的鏈接庫文件,包含鏈接庫源文件(.c)中的各函數實現、調試信息等。
.out一般也是由gcc編譯生成的二回進制格式文件,但有可能是執行程序也可能是鏈接庫文件,因為在linux中擴展名除了一些特殊的約定,一般情況下是無意義的。
執行文件也分動態鏈接還是靜態鏈接。大多數情況都是動態鏈接,裡面存放源文件(.c)中編譯後的二進制代碼及所調用函數庫的入口參數,靜態鏈接則是all-in-one,就是將所用到的非標准庫都打包到執行文件中答,所以體積都較大。

Ⅲ linux 怎麼編譯.so文件

.so是linux用的 所以 要生成so 需要用gcc 和生成可執行文件類似,只是增加一些編譯選項 命令如下內 gcc SOURCE_FILES -fPIC -shared -o TARGET SOURCE_FILES可以容是.c文件,也可以是經過-c編譯出來的.o文件 TARGET為so文件。

Ⅳ linux中,a文件與.so文件有什麼關系嗎

.a和.so文件都是函數庫文件。庫是一組預先編譯好的函數的集合,庫文件的名字以內lib開頭,隨後的容部分指明這是什麼庫(例如c代表C語言庫,m代表數學庫)。
.a代表的是靜態函數庫,當同時運行多個程序並且都使用到同一個函數庫的函數時,內存中就會有同一函數的多份副本,會消耗大量寶貴的內存。
.so是共享函數庫,可以克服.a函數庫的不足。當一個程序使用共享函數庫時,程序本身不再包含函數代碼,而只是引用共享代碼,當實際調用時,共享庫才被載入到內存中。
.a文件類似於Windows下的.lib文件,.so文件類似於Windows下面的.dll文件,這樣就好理解了。

Ⅳ Linux下如何將多個.c文件生成.so文件

最好把頭文件與so一起打包,當然你知道裡面介面的定義的話頭文件也不需要
linux版本專太多(redhat,屬centos,ubuntu,solaris.....),各個版本之間有差異別的電腦相同版本的linux系統的話應該能用,如果系統不一樣不行

Ⅵ linux中把.c的文件編譯成.so

就跟用VS編譯dll或者lib文件差不多,把代碼編譯完成以後,命名為相應的後綴就好了。

例如:
gcc -c -fPIC libst.c
生成 libst.o

然後
gcc -shared -fPIC -o libst.so libst.o
生成 libst.so 動態鏈接庫

把libst.so拷貝到系統默認庫目錄下,比如 /lib, /usr/lib 下
假定有 test.c 要引用這個庫
gcc -lst -o test test.c
然後就可以了

假如不能把libst.so拷貝到默認庫目錄下,比方說放在了
/home/aaa/lib 下
那麼就用這樣的語句來編譯test.c
gcc -L/home/aaa/lib -lst -Wl,-rpath=/home/aaa/lib -o test test.c

Ⅶ linux下如何查看.a.so文件是由什麼文件編譯連接

linux下如何查看.a.so文件是由什麼文件編譯連接
so文件就是通常說的動態鏈接庫,就跟windows下的專dll文件屬差不多。
ko是內核模塊文件,驅動之類的啥的。
不過在linux系統下文件的後綴多數情況下只是個標識,有可能代表不了文件的真實屬性的。
至於怎麼編寫,就跟用VS編譯dll或者lib文件差不多,把你的代碼編譯完成以後命名為相應的後綴就好了。
我了解的一般都是C程序,java屬於腳本語言,程序多數情況下是被解釋執行的,所以一般不需要編譯成庫。至於如何編譯成庫文件,如果你在windows下做過開發的話應該不用我解釋太多。實在不知道的話可以再問我哈~~
希望以上回答能對你有所幫助。

Ⅷ C++文件如何在linux下生成動態庫So,以及如何使用這個動態庫

用g++指定參數可以生成動態庫,使用動態庫的話就用dlopen() 和 dlsym()

Ⅸ linux使用libtool生成動態庫名為.la,請問.so在什麼地方

libc 和 lib-linux 這兩個最基本的庫都沒有,請問其他電腦上跑的是linux嗎?沒有這兩個庫,沒有一個程序可以運行。 另外,不可能把已有的動態庫「直接」轉換成靜態庫,你只能從源碼編譯出靜態庫。

閱讀全文

與linuxa生成so相關的資料

熱點內容
css兼容性工具 瀏覽:757
任帥和檳榔妹妹的愛情故事啥電影 瀏覽:633
還有一個p開頭的網站 瀏覽:275
中央新下達文件50個省 瀏覽:613
銅仁網站製作多少錢 瀏覽:991
電影14路末班車免費觀看 瀏覽:665
ak愛看福利電影院 瀏覽:438
配置文件的工具 瀏覽:886
跨平台編程語言哪個好 瀏覽:316
win7桌面文件整理 瀏覽:757
如何進入電子網路發票應用系統 瀏覽:80
一部電影女主是蛇變的 瀏覽:779
恐怖片吻戲 瀏覽:62
有個小說主角叫楚天 瀏覽:884
大數據的內涵有哪些內容 瀏覽:800
日本大奶 電影 瀏覽:91
大數據反間 瀏覽:945
一個電影坐別人車後面有血 瀏覽:852
空姐大戰猛鬼電影 瀏覽:507

友情鏈接