动态库,静态库
静态库:
简单的说,静态库就是在链接阶段会加载到可执行程序的库,从而生成的可执行程序可以单独的执行。
windows下的静态库一般命名为:xxx.lib
Linux下的静态库一般命名为:xxx.a
动态库:
相反,动态库不会加载到可执行程序,因此依赖于动态库的可执行程序需要动态库的支持才能运行。
windows下的动态库一般命名为:xxx.dll
Linux下的动态库一般命名为:xxx.so
举个例子:
比如要跑某个软件,从网上找了软件包后,发现运行时提示缺少.dll文件,其实就是缺少可执行程序需要的动态库,这个时候你可以在网上找到所需的.dll文件然后拷贝到指定目录,软件就能运行了!
如何创建动态库,静态库(使用cmake创建CMakeLists.txt文件):
SET(SRC printHello.cpp)
ADD_LIBRARY(printHello STATIC ${SRC}) # 生成静态库.a
SET_TARGET_PROPERTIES(printHello PROPERTIES OUTPUT_NAME "print")
SET_TARGET_PROPERTIES(printHello PROPERTIES CLEAN_DIRECT_OUTPUT 1)
ADD_LIBRARY(Hello SHARED ${SRC}) # 生成动态库.so
SET_TARGET_PROPERTIES(Hello PROPERTIES OUTPUT_NAME "print")
SET_TARGET_PROPERTIES(Hello PROPERTIES CLEAN_DIRECT_OUTPUT 1)
INSTALL (FILES printHello.h DESTINATION include/print) #安装头文件
INSTALL (TARGETS printHello Hello LIBRARY DESTINATION lib ARCHIVE DESTINATION lib) #TARGETS表示安装库文件
安装后就可以在指定目录找到自己创建的库文件。
如何使用:
INCLUDE_DIRECTORIES(/usr/include/print) # 添加头文件搜索路径
TARGET_LINK_LIBRARIES(目标文件 libprint.so) #链接动态库