導航:首頁 > 源碼編譯 > linux靜態編譯

linux靜態編譯

發布時間:2022-01-14 00:54:47

linux怎麼靜態編譯

關於在 Linux 環境下面對 C 語言源程序進行靜態編譯,關鍵是要看你的 C 語言源程序中都使用到了哪些系統庫函數?如果是標準的輸入、輸出庫函數,只要在命令行提示符 $ 下面執行:
gcc my_prog.c 即可(預設的可執行文件名是:a.out);如果在用戶的源程序中使用到了數學計算函數,那麼在命令行提示符 $ 下面必須執行:
gcc my_prog.c -IMATH.LIB(假設涉及到各種數學計算的數學庫的庫文件為:MATH.LIB)
如果不加上 -IMATH.LIB 選項,那麼即使你的源程序編寫得再正確,也無法正常編譯。
另外還有一個必須要注意的就是:在 Linux 的環境變數中,一定要把 INCLUDE、LIB 所在的路徑設置好(在 SHELL 文件中寫好),這樣在使用 Linux 系統時才能夠減少出錯的機會。

② 在linux系統中,靜態編譯和動態編譯哪個速度快的

你說的靜態庫和動態庫吧?編譯速度沒有太大的區別,在實際運行時,靜態庫運行較快,而動態庫內地函數由於在實際使用到時才載入到內存,所以運行較慢。動態庫的好處是只要保持介面不變,就可以在程序運行時進行動態庫的切換。

③ 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加入調試代碼等:
gcc
-c
hello.c
-o
hello.o
1.連接成靜態庫
連接成靜態庫使用ar命令,其實ar是archive的意思
$ar
cqs
libhello.a
hello.o
2.連接成動態庫
生成動態庫用gcc來完成,由於可能存在多個版本,因此通常指定版本號:
$gcc
-shared
-wl,-soname,libhello.so.1
-o
libhello.so.1.0
hello.o
另外再建立兩個符號連接:
$ln
-s
libhello.so.1.0
libhello.so.1
$ln
-s
libhello.so.1
libhello.so
這樣一個libhello的動態連接庫就生成了。最重要的是傳gcc
-shared
參數使其生成是動態庫而不是普通執行程序。
-wl
表示後面的參數也就是-soname,libhello.so.1直接傳給連接器ld進行處理。實際上,每一個庫都有一個soname,當連接器發現它正在查找的程序庫中有這樣一個名稱,連接器便會將soname嵌入連結中的二進制文件內,而不是它正在運行的實際文件名,在程序執行期間,程序會查找擁有
soname名字的文件,%b

④ 配置Linux內核的時候,驅動的靜態編譯和動態編譯有什麼區別

驅動的動態編譯會生成.ko文件,系統啟動後需要載入該驅動後才能使用相應設備。
而靜態編譯則直接編譯進內核,系統啟動的時候會自動載入該驅動。
靜態編譯太多驅動至內核,會導致內核體積過大,啟動時間較長。而動態編譯則比較自由靈活,需要用的時候即載入,不需要的時候即卸載。我以前在EasyARM-iMX280的學習手冊里看到寫得很清楚,你可以去看看的。

⑤ 如何將ld-linux.so.2靜態編譯到程序中

這是glibc的庫文件,一般鏈接到相應版本的ld-xxx.so上,是和動態庫載入有關的函數,具體封裝了哪些函數,請查相應版本的Glibc源碼

⑥ linux下 c++類可以編譯成靜態鏈接庫么

linux有個規定.
庫要用lib開頭
所以你編譯時要在前面加個lib
gcc -c lib.cpp ---->生成 lib.o

ar cqs liblib.a lib.o ---->生成liblib.o 用的時候只要llib就行了

gcc test.cpp -o test -static -L . -llib 這樣子就可以編譯通過啦

⑦ 如何解決:linux下qt的靜態編譯

需要自己編譯QT的靜態編譯版本,網上有相應的介紹,主要就是一大堆的參數,用這些參數來編譯QT的靜態版本

⑧ 如何以靜態鏈接方式交叉編譯linux上的軟體n

在編譯命令行中,將使用的靜態庫文件放在源文件後面就可以了。比如:
gcc -L/usr/lib myprop.c libtest.a libX11.a libpthread.a -o myprop
其中-L/usr/lib指定庫文件的查找路徑,編譯器默認在當前目錄下先查找指定的庫文件。

⑨ Linux 需要使用linux-gate.so,卻需要靜態編譯,怎麼辦

用-static選項編譯
arm-linux-gcc -static test.c -o test
或者在Makefile中為CFLAGS加上-static選項。

⑩ linux嵌入式中的靜態交叉編譯是什麼意思

應該說是分為靜態和動態的

靜態就是把需要的庫文件也直接編譯進去

動態則是在需要的時候才去調用,本身不編譯進去

閱讀全文

與linux靜態編譯相關的資料

熱點內容
安卓如何退回初始系統 瀏覽:951
用什麼手錶能代替app 瀏覽:705
女程序員熬夜體檢 瀏覽:715
解壓故事校園戀愛又煩惱 瀏覽:555
冰箱壓縮機放多久能啟動 瀏覽:171
軟體演算法發明專利 瀏覽:987
旁氏演算法 瀏覽:765
程序員那麼可愛電視劇免費觀看極速版 瀏覽:747
程序員那麼可愛陸漓孩子保住了嗎 瀏覽:564
如何獲取伺服器dns秒解 瀏覽:663
如何破解大黃蜂的加密文件 瀏覽:11
新概念英語第三冊pdf 瀏覽:401
分項詳細估演算法步驟 瀏覽:436
ipad桌面文件夾放大 瀏覽:891
我的世界基岩版怎麼進國際伺服器 瀏覽:516
福州醫院有沒有解壓艙 瀏覽:470
帶pwm的51單片機 瀏覽:918
ace程序員指南源碼 瀏覽:416
哪個app可以分36期還款 瀏覽:244
為什麼安卓軟體平台那麼多 瀏覽:288