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

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 运维知识 > linux >内容正文

linux

linux 如何产生so文件,printf()函数 【转】Linux下gcc编译生成动态链接库*.so文件并调用它(2)...

發(fā)布時(shí)間:2024/9/27 linux 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 linux 如何产生so文件,printf()函数 【转】Linux下gcc编译生成动态链接库*.so文件并调用它(2)... 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

本文僅限于介紹 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)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。