国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 操作系統 > 正文

第四章 如何生成動態、靜態鏈接庫并使用

2024-06-28 13:22:04
字體:
來源:轉載
供稿:網友
第四章 如何生成動態、靜態鏈接庫并使用

第四章 如何生成動態、靜態鏈接庫并使用

一、如何生成動態鏈接庫并使用

1、生成動態鏈接庫

在第三章創建的PRoject1工程里面把main.cpp的main函數名更名為maina。

打開project1.pro,將TEMPLATE = app改為TEMPLATE = lib。

執行“qmake”生產新的Makefile,再執行“make”編譯。

編譯過程中用ln指令生產了動態鏈接庫的軟鏈接文件。make編譯工程時,就執行“ln -s”建立指向libproject1.so.1.0.0的3個軟鏈接文件(libproject1.so,libproject1.so.1和libproject1.so.1.0)。程序在鏈接動態庫時,默認搜索“.so”后綴的文件,因而為了能使用這些庫,需要建立指向它們的軟鏈接(鏈接名以.so為后綴),這就是工程編譯的時候建立軟鏈接的意義。

2、使用動態鏈接庫

當第三方程序鏈接庫libproject1.so時,調用maina即可繪制出一個軟件界面。細節都在庫中實現了,使用者只需調用接口。執行下面指令:

在mylib.h輸入以下代碼保存

庫和庫的接口定義文件都齊備了,接下來在testlib目錄下編寫使用這個庫的測試代碼test.cpp,內容如下:

最后就是編譯測試

"-I"來指定庫的頭文件搜索路徑;“-L”指定動態庫所在的路徑;“-lproject1”告訴編譯器具體找哪個庫,注意:我們寫的是“-lproject1”,并不是“-llibproject1”,能這樣寫也是因為linux對動態鏈接庫命名的偏好(必須以“lib”3個字母開頭)引起的。在用“-l”指定要鏈接的庫文件名時,可以簡寫為“-lproject1”而不用寫全。

執行.test時出現上面錯誤提示,提示找不到動態鏈接庫,執行“ldd ./test”,查看一下test用到的動態鏈接庫都有哪些。

可以看到“libproject1.so.1 => not found”,而程序用到的其他的庫,如libc.so.6在“/lib”目錄下,libstdc++.so.6在“/usr/lib”下可以找到。這兩個路徑(/lib和/usr/lib)正是Linux動態庫的默認搜索路徑。自己做的動態鏈接庫(libproject1.so.1)需要復制到默認搜索路徑里面,當應用程序執行是需要用到動態鏈接庫里面的接口(maina),系統會自動地到默認搜索路徑去找相應的動態庫,然后把找到的動態鏈接庫載入內存供應用程序使用。

通過加載環境變量(LD_LIBRARY_PATH)來指定動態庫搜索路徑。

之前的軟件界面出來了。

二、如何生成靜態鏈接庫并使用

1、生成靜態鏈接庫

在第三章創建的project1工程里面打開project1.pro,在里面添加一條語句“CONFIG += staticlib”。

執行“qmake”生產新的Makefile,再執行“make”編譯生成靜態鏈接庫libproject1.a。

2、使用靜態鏈接庫

在建立的testlib目錄下創建teststaticlib目錄,把生成的靜態鏈接庫(libproject1.a)和前面創建的mylib.h頭文件以及測試代碼test.cpp復制到teststaticlib目錄下,執行“qmake -project”生成工程文件teststaticlib.pro,編譯該文件,添加“LIBS += -L ./ -lproject1”,指定libproject1.a搜索路徑,之后重新生成Makefile,編譯運行工程,可以看到那個界面有蹦出來了。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 晋城| 阜城县| 宜兰市| 茂名市| 盐边县| 贵港市| 清新县| 乌海市| 老河口市| 兴业县| 新营市| 弋阳县| 瓦房店市| 那坡县| 拜泉县| 台州市| 海原县| 巴楚县| 九龙县| 闽清县| 阿拉善左旗| 廊坊市| 紫阳县| 宿迁市| 双峰县| 塔城市| 迭部县| 博野县| 双城市| 黔西县| 中宁县| 张家界市| 信宜市| 确山县| 葫芦岛市| 本溪| 福清市| 荆州市| 屯昌县| 岑巩县| 清水县|