linux 如何产生so文件,printf()函数 【转】Linux下gcc编译生成动态链接库*.so文件并调用它(2)...
本文僅限于介紹 linux 下的庫(kù)。
1.2、 庫(kù)的種類
linux 下的庫(kù)有兩種:靜態(tài)庫(kù)和共享庫(kù)(動(dòng)態(tài)庫(kù))。
二者的不同點(diǎn)在于代碼被載入的時(shí)刻不同。
靜態(tài)庫(kù)的代碼在編譯過(guò)程中已經(jīng)被載入可執(zhí)行程序,因此體積較大。
靜態(tài)用.a為后綴, 例如: libhello.a
共享庫(kù)(動(dòng)態(tài)庫(kù))的代碼是在可執(zhí)行程序運(yùn)行時(shí)才載入內(nèi)存的,在編譯過(guò)程中僅簡(jiǎn)單的引用,因此代碼體積較小。
動(dòng)態(tài)通常用.so為后綴, 例如:libhello.so
共享庫(kù)(動(dòng)態(tài)庫(kù))的好處是,不同的應(yīng)用程序如果調(diào)用相同的庫(kù),那么在內(nèi)存里只需要有一份該共享庫(kù)的實(shí)例。
為了在同一系統(tǒng)中使用不同版本的庫(kù),可以在庫(kù)文件名后加上版本號(hào)為后綴,例如:libhello.so.1.0,由于程序連接默認(rèn)以.so為文件后綴名。所以為了使用這些庫(kù),通常使用建立符號(hào)連接的方式。
libbrokenlocale.so.1 libgcc_s.so libnss_dns-2.5.so libnss_nis.so.2 libthread_db-1.0.so。
兩者換算關(guān)系為:r=ln(1+r0)或r0=exp(r)-1例如r0=0.06,則r=ln(1+0.06)=0.0583,即100以583%的連續(xù)復(fù)利投資第二年將獲106,該結(jié)果與直接用r0=0.06計(jì)算的答案一致。
例如r0=0.06,則r=ln(1+0.06)=0.0583,即100以583%的連續(xù)復(fù)利投資第二年將獲106,該結(jié)果與直接用r0=0.06計(jì)算的答案一致。
a需=-103.6 ×ln(1-0.9975)÷0.08。
1.3、靜態(tài)庫(kù),動(dòng)態(tài)庫(kù)文件在linux下是如何生成的:
以下面的代碼為例,生成上面用到的hello庫(kù):
#include 'hello.h'
void sayhello()
{
printf('hello,world ');
}
首先用gcc編繹該文件,在編繹時(shí)可以使用任何合法的編繹參數(shù),例如-g加入調(diào)試代碼等:
$gcc -c hello.c -o hello.o
1、生成靜態(tài)庫(kù) 生成靜態(tài)庫(kù)使用ar工具,其實(shí)ar是archive的意思
$ar cqs libhello.a hello.o
2、生成動(dòng)態(tài)庫(kù) 用gcc來(lái)完成,由于可能存在多個(gè)版本,因此通常指定版本號(hào):
$gcc -shared -o libhello.so.1.0 hello.o
1.4、庫(kù)文件是如何命名的,有沒(méi)有什么規(guī)范:
在 linux 下,庫(kù)文件一般放在/usr/lib和/lib下,
靜態(tài)庫(kù)的名字一般為libxxxx.a,其中 xxxx 是該lib的名稱;
動(dòng)態(tài)庫(kù)的名字一般為libxxxx.so.major.minor,xxxx是該lib的名稱,major是主版本號(hào),minor是副版本號(hào)
1.5、可執(zhí)行程序在執(zhí)行的時(shí)候如何定位共享庫(kù)(動(dòng)態(tài)庫(kù))文件 :
而且,對(duì)于win8系統(tǒng),它利用uefi安全啟動(dòng)以及固件中存儲(chǔ)的證書與平臺(tái)固件之間創(chuàng)建一個(gè)信任源,可以確保在加載操作系統(tǒng)之前,近能夠執(zhí)行已簽名并獲得認(rèn)證的“已知安全”代碼和啟動(dòng)加載程序,可以防止用戶在根路徑中執(zhí)行惡意代碼。
單擊new,選擇python解釋器python.exe,打開后顯示出一個(gè)包含很多復(fù)選框的窗口,選擇需要加入系統(tǒng)pythonpath的路徑,單擊ok。
同理,單擊new,選擇d:\jython2.5.3目錄下的jython.jar包,打開后顯示出一個(gè)包含很多復(fù)選框的窗口,選擇需要加入系統(tǒng)pythonpath的路徑,單擊ok。
#你需要知道解釋器的完成路徑名稱。
對(duì)于 elf 格式的可執(zhí)行程序,是由 ld-linux.so* 來(lái)完成的,它先后搜索 elf 文件的 DT_RPATH段—環(huán)境變量LD_LIBRARY_PATH—/etc/ld.so.cache 文件列表— /lib/,/usr/lib目錄找到庫(kù)文件后將其載入內(nèi)存
本文來(lái)自電腦雜談,轉(zhuǎn)載請(qǐng)注明本文網(wǎng)址:
http://www.pc-fly.com/a/ruanjian/article-90979-2.html
總結(jié)
以上是生活随笔為你收集整理的linux 如何产生so文件,printf()函数 【转】Linux下gcc编译生成动态链接库*.so文件并调用它(2)...的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: mysql 5.7 io 性能 aio_
- 下一篇: Linux用户登录自动拷贝文件,linu