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