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