簡介:
在 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下如何使用共享庫。