linux靜態庫多平台編譯
在編譯命令行中,將使用的靜態庫文件放在源文件後面就可以了。比如:
gcc -L/usr/lib myprop.c libtest.a libX11.a libpthread.a -o myprop
其中-L/usr/lib指定庫文件的查找路徑,編譯器默認在當前目錄下先查找指定的庫文件。
㈡ 在Linux下如何使用GCC編譯程序、簡單生成 靜態庫及動態庫
一個程序調用了一個動態庫,但是兩者之間有函數重名,導致運行時動態庫中的Linux下動態庫文件的擴展名為這樣,線程函數庫被稱作libthread.so。靜態庫的
㈢ Linux編譯靜態鏈接庫出現如圖錯誤,求救!
1.
只表明
庫文件
路徑,未說明庫文件名稱。選項再加一條
-l
count
2.
庫文件命名錯誤,應該為"libxxx.a"(靜態庫),此處名稱應為libcount.a
3.
重要:記得不清了,可能我上面說的都是錯的!!!
㈣ linux下編譯怎麼鏈接靜態庫
靜態庫不能被打包到.o 文件 在C編譯中, 是.c編譯成.o,然後若干個.o打包成.a .a要比.o高一級的。 所以不能產生新的.o 你可以把.a文件解開 成為.o集合 加上你的.o文件, 共同打包成一個新的.a文件 這樣是可行的。
㈤ Linux 中,在使用g++編譯、連接程序時,怎樣調用多個靜態庫文件
在編譯命令行中,將使用的靜態庫文件放在源文件後面就可以了。比如:
gcc -L/usr/lib myprop.c libtest.a libX11.a libpthread.a -o myprop
其中-L/usr/lib指定庫文件的查找路徑,編譯器默認在當前目錄下先查找指定的庫文件。
㈥ 如何使用預編譯的靜態庫平台
tbb 2.2中提供了統一的頭文件:tbb.h,只要包含這個文件就可以使用所有tbb的庫了。為了使用起來方便,以及可以使用靜態庫,可以使用以下這些命令自己創建:
# 1. 先下載 tbb22_20090908oss_src.tgz, 去 http://www.threadingbuildingblocks.org
# 2. 解壓
tar -zxvf tbb22_20090908oss_src.tgz
cd tbb22_20090908oss
# 3. 編譯,沒必要直接make,很多東東其實不需要
make tbb && make tbbmalloc
# 4.編譯好的東東在build目錄下,不同的編譯器和操作系統,文件夾的名字不一樣
cd build/linux_ia32_gcc_cc4.1.0_libc2.4_kernel2.6.16.46_release
# 5.自己寫個命令把o文件打包成靜態庫
ar cqs libtbb.a *.o
cp libtbb.a ../../../
#再去預編譯頭文件
cd ../../include/tbb
g++ -o tbb.h.gch -x c++-header -c tbb.h -g -Wall -Werror -O2 -DNDEBUG
cp tbb.h.gch tbb.h ../../../
cd ../../../
㈦ 請教關於linux中靜態庫與動態庫的問題
哈哈,簡單的來說可以按你這么理解,靜態庫就是在打包在程序裡面的,而動態庫是和程序分離開的,是程序需要的時候動態裝配進內存的。
說一下我自己的理解和經驗吧:動態庫之所以會用到,是因為有些庫會被多個程序用到,拿windows的例子來說吧,比方說你開兩個游戲,一個魔獸,一個極品飛車,這兩個都要用到activex 這個庫,如果做為動態庫,兩個程序共用一個,但是靜態庫就要分別為兩個游戲都生成庫,如果更多的話,這樣就浪費了內存很多空間。
靜態庫是和程序一起裝入內存的(其實靜態庫已經成為程序的一部分),而動態庫是動態裝入內存的,如果內存不大,又使用靜態庫,必然會發生很多的缺頁中斷,這樣效率會很低哦,你有興趣可以多多研究一下內存的一些演算法,linux kernel有現成的分頁演算法,會對你很有幫助的。
如果缺頁中斷不太明白的話可以看看操作系統的書,或者追問我,大家一起切磋交流~
㈧ 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實驗 怎麼完成封裝,怎麼編譯靜態庫或動態庫
恩,x86下面的linux庫簡單啊,建議寫個makefile。靜態使用static就行,動的用shared。
㈩ Linux 下Makefile怎麼寫,編譯包含 一個共享庫文件,一個靜態庫文件,四個.c文件。
看看偉東山裸機的源代碼就能知道了, 調用的庫文件只需放在同一目錄下就可以