藉助 qt creator 建立屬於自己的共享庫
簡介:
在 Windows 上,共享庫 由 .dll 表示;在 Linux 上, 由 .so 表示 。
Shared Library的優勢
共享庫,又稱動態庫或so檔案,顧名思義,它可以在可執行檔案啟動時載入或程序執行期被呼叫。使用共享庫有很多好處,例如(包含但不限於下面提到的場景):
1) 減少了依賴共享庫的模組的大小,因為它們不必把共享庫提供的功能的實現程式碼靜態編譯到自己的模組程式碼中。
2) 在同一臺機器上執行的多個程序會在記憶體中共享同一份動態庫,作業系統採用的這種記憶體佈局方式可以極大地節省機器記憶體資源。
3) 若很多模組依賴了以共享庫形式提供的同一個底層庫,則底層庫升級時,只需升級該so檔案即可,無需重新編譯應用模組;而若底層庫以靜態編譯形式整合在上層模組內部時,則需要重新
編譯每個依賴了該庫的模組。
3) 即使某些 so庫新版本不滿足後向相容也可以升級,某些不支援新版so庫的應用程式可以不受影響,繼續使用舊版本。
4) 應用程式可以利用 so庫覆蓋某些庫,還可以覆蓋庫中的某些函式(即仍使用某庫,但該庫中的某些函式被so庫的同名函式覆蓋) 。
由於shared library有其獨特的場景應用優勢,因此*NIX作業系統的底層庫基本都以共享庫(*.so)形式提供,其實,windows作業系統底層庫也是以共享庫(*.dll)形式提供的。
接下來是.h檔案的內容:
#ifndef GENERATESHARELIB_H
#define GENERATESHARELIB_H
class GenerateShareLib
{
public:
GenerateShareLib();
int add(int x, int y);
};
#endif // GENERATESHARELIB_H
接下來是.cpp檔案的內容:
#include "generatesharelib.h"
GenerateShareLib::GenerateShareLib()
{
}
int GenerateShareLib::add(int x, int y)
{
return x + y;
}
主要是.pro中的內容:
QT -= core gui
TARGET = GenerateShareLib
TEMPLATE = lib
DEFINES += GENERATESHARELIB_LIBRARY
SOURCES += generatesharelib.cpp
HEADERS += generatesharelib.h
unix {
target.path = /usr/lib
INSTALLS += target
}
生成共享庫的截圖如下:
這次主要和大家分享Linux下藉助qt creator如何建立共享庫,下次和大家分享在Linux下如何使用共享庫。