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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

linux代码动态分析软件,举例分析Linux动态库和静态库

發布時間:2023/11/27 生活经验 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 linux代码动态分析软件,举例分析Linux动态库和静态库 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

函數庫分為靜態庫和動態庫兩種。創建Linux靜態庫和Linux動態庫和使用它們在這里將以舉例的形式詳述一下。靜態庫在程序編譯時會被連接到目標代碼中,程序運行時將不再需要該靜態庫。動態庫在程序編譯時并不會被連接到目標代碼中,而是在程序運行是才被載入,因此在程序運行時還需要動態庫存在。

第1步:編輯得到舉例的程序--hello.h、hello.c和main.c;

hello.h(見程序1)為該函數庫的頭文件。

hello.c(見程序2)是函數庫的源程序,其中包含公用函數hello,該函數將在屏幕上輸出"Hello XXX!"。

main.c(見程序3)為測試庫文件的主程序,在主程序中調用了公用函數hello。

--------------------------------------------------------------------------------

程序1:?hello.h

#ifndef?HELLO_H

#define?HELLO_H

void?hello(const?char?*name);

#endif?//HELLO_H

--------------------------------------------------------------------------------

程序2:?hello.c

#include

void?hello(const?char?*name)

{

printf("Hello?%s!\n",?name);

}

--------------------------------------------------------------------------------

程序3:?main.c

#include?"hello.h"

int?main()

{

hello("everyone");

return?0;

}

--------------------------------------------------------------------------------

第2步:將hello.c編譯成.o文件

無論靜態庫,還是動態庫,都是由.o文件創建的。因此,我們必須將源程序hello.c通過gcc先編譯成.o文件。在系統提示符下鍵入以下命令得到hello.o文件。

# gcc -c hello.c

第3步:由.o文件創建靜態庫

靜態庫文件名的命名規范是以lib為前綴,緊接著跟靜態庫名,擴展名為.a。例如:我們將創建的靜態庫名為myhello,則靜態庫文件名就是libmyhello.a。在創建和使用靜態庫時,需要注意這點。創建靜態庫用ar命令。在系統提示符下鍵入以下命令將創建靜態庫文件libmyhello.a。

# ar cr libmyhello.a hello.o

第4步:在程序中使用靜態庫

靜態庫制作完了,如何使用它內部的函數呢?只需要在使用到這些公用函數的源程序中包含這些公用函數的原型聲明,然后在用gcc命令生成目標文件時指明靜態庫名,gcc將會從靜態庫中將公用函數連接到目標文件中。注意,gcc會在靜態庫名前加上前綴lib,然后追加擴展名.a得到的靜態庫文件名來查找靜態庫文件。在程序3:main.c中,我們包含了靜態庫的頭文件hello.h,然后在主程序main中直接調用公用函數hello。下面先生成目標程序hello,然后運行hello程序看看結果如何。

# gcc -o hello main.c -L. -lmyhello

# ./hello

Hello everyone!

#

21/212>

總結

以上是生活随笔為你收集整理的linux代码动态分析软件,举例分析Linux动态库和静态库的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。