什么叫做静态库和动态库
时间: 2023-05-15 21:06:20 浏览: 102
静态库和动态库都是编程中常用的库文件,用于存储程序中的函数和变量等信息。静态库在编译时被链接到程序中,程序运行时不需要再加载,因此程序的运行速度较快,但是静态库会增加程序的体积。动态库则是在程序运行时才被加载,因此程序的体积较小,但是运行速度较慢。动态库可以被多个程序共享,因此可以减少内存的占用。
相关问题
详谈静态库和动态库的区别
静态库和动态库在编译和运行时的行为有所不同。静态库在程序编译时会被连接到目标代码中,而动态库则是在程序运行时才被载入。
静态库对应的lib文件叫做静态库,而动态库对应的lib文件叫做导入库。静态库本身包含了实际执行代码、符号表等信息,而导入库只包含了地址符号表等,用于确保程序能够找到对应函数的基本地址信息。\[1\]
静态库的大小通常比较大,因为它包含了实际执行代码和其他必要的信息。而动态库的大小相对较小,因为它只包含了地址符号表等基本信息。\[1\]
使用静态库的程序在编译时会将静态库的代码复制到最终的可执行文件中,因此可执行文件会比较大。而使用动态库的程序在编译时只会包含对动态库的引用,而不会将动态库的代码复制到可执行文件中。这样可以减小可执行文件的大小,并且多个应用程序可以共享同一个动态库的实例,避免了空间浪费。\[3\]
另外,动态库的使用还解决了静态库对程序的更新、部署和发布带来的麻烦。当需要更新动态库时,只需要替换动态库文件即可,而不需要重新编译整个程序。这样可以实现增量更新,方便程序的维护和升级。\[3\]
综上所述,静态库和动态库的主要区别在于编译时和运行时的行为不同,静态库在编译时被连接到目标代码中,而动态库在程序运行时才被载入。此外,静态库会增加可执行文件的大小,而动态库可以实现共享和增量更新。
#### 引用[.reference_title]
- *1* *2* [静态库和动态库的区别](https://blog.csdn.net/sinat_16643223/article/details/114027857)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item]
- *3* [详谈静态库和动态库的区别](https://blog.csdn.net/weixin_71478434/article/details/126588174)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item]
[ .reference_list ]
cmakelists 生成静态库,然后用静态库生成动态库
cmake是一个跨平台的自动化构建工具,可用于生成各种类型的项目文件。CMakeLists是cmake的配置文件,用于描述如何生成编译器所需的构建信息。
在linux系统中,静态库和动态库是常见的可重定向目标文件。静态库是将所有依赖项打包在一起,并在应用程序链接时一起编译的库。而动态库是在应用程序运行时加载并链接到运作时环境的库。
生成静态库非常简单。在CMakeLists中,我们可以添加库的名称和源文件,然后调用add_library命令来构建静态库。例如,下面的代码段定义了一个叫做mylibrary的静态库,并将两个源文件相连:
add_library(mylibrary STATIC source1.cpp source2.cpp)
生成的静态库文件通常被命名为libmylibrary.a。
现在我们想要使用上述静态库生成一个动态库,我们需要在CMakeLists中再一次调用add_library命令,但这次类型应该是“SHARED”,表示动态库。同时需要注意的是,在生成动态库的同时,我们需要链接到之前生成的静态库。下面是一个示例代码:
add_library(mylibrary_dynamic SHARED source3.cpp)
target_link_libraries(mylibrary_dynamic mylibrary)
上述代码会将源文件source3.cpp编译为动态库,并将之前生成的静态库mylibrary链接到动态库mylibrary_dynamic中。生成的动态库文件通常被命名为libmylibrary_dynamic.so。
总之,cmakelists可以用来生成静态库和动态库。生成静态库时我们需要调用add_library命令,并指定STATIC类型;而生成动态库时,我们需要调用add_library命令,并指定SHARED类型,同时会涉及到链接上一个静态库。以上就是使用cmakelists来生成静态库并用静态库生成动态库的具体方法。