当前位置: 首页 > news >正文

福建省建设系统网站icp备案综合查询网站

福建省建设系统网站,icp备案综合查询网站,做网站的高手,玉环建设局网站文章目录 静态库构建静态库 动态库构建动态库 它们的不同参考文章 单独提这个 库#xff0c;我想我们在coding过程中#xff0c;可能也会知道一两个词#xff0c;如 标准库、xx库等。库作为一组已编写好、组织好的、可复用的资源接口#xff0c;可以被用于其他程序。很不… 文章目录 静态库构建静态库 动态库构建动态库 它们的不同参考文章 单独提这个 库我想我们在coding过程中可能也会知道一两个词如 标准库、xx库等。库作为一组已编写好、组织好的、可复用的资源接口可以被用于其他程序。很不夸张地说很多程序都需要依赖一些底层依赖库从而支撑它们完成一些基础工作。 库主要分为两种类型静态库static library和动态库shared library。 静态库 静态库是一个在链接过程中采用静态链接方式链接进可执行文件中的库文件在静态链接方式中可执行文件会拷贝静态库中导出的接口并使其成为它的一部分。在Windows系统中它主要是以.lib为后缀而在Linux系统中主要以.a为后缀。 构建静态库 项目结构为 . ├── CMakeLists.txt ├── library.h ├── library.cppCMakeLists.txt中的内容为 cmake_minimum_required(VERSION 3.26) project(library) set(CMAKE_CXX_STANDARD 11) add_library(library STATIC library.cpp)library.h的内容为 #ifndef HELLO_LIB_LIBRARY_H #define HELLO_LIB_LIBRARY_H#include string class Test { public:explicit Test(std::string str);std::string getStr() ;static int getNum() ; private:std::string str_;static int num; // count value };void print(); #endif //HELLO_LIB_LIBRARY_Hlibrary.cpp的内容为 #include library.h#include iostreamint Test::num 0; // init Test::Test(std::string str):str_(std::move(str)) {} std::string Test::getStr() {num;return str_; }int Test::getNum(){return num;} 采用cmake进行构建即可生成对应的静态库文件在Window环境下将会生成library.lib而在Linux环境下将会生成liblibrary.a。 随后可以在另一个项目中使用它项目结构为 . ├── build ├── CMakeLists.txt ├── include │ └── library.h ├── lib │ └── library.lib └── src└── main.ccCmakeLists.txt的内容为 cmake_minimum_required(VERSION 3.10)project(lib_test)set(CMAKE_CXX_STANDARD 11) include_directories(include) # 增加链接库的搜索路径 link_directories(lib) # 链接 library库 link_libraries(library) add_executable(${PROJECT_NAME} src/main.cc)而随后就可以在main.cc中使用它们了 #includeiostream #includelibrary.h int main() {Test test(Hello);std::cout test.getStr();std::cout Test::getNum();return 0; }动态库 动态库也叫做共享库在编译时并不会将所导出的接口拷贝到可执行文件中而是在运行时才会被程序所引用。在Windows系统中它主要是以.dll为后缀而在Linux系统中主要以.so为后缀。需要特别注意的是在MSVC编译器中Windows环境下不仅生成dll后缀文件还会生成.lib文件该文件此刻的作用是作为一个导入库。 构建动态库 项目结构大体上和上述提到的构建的静态库一致但还需要修改一下CMakeLists以及library.h针对MSVC编译器Linux环境、MinGW-gcc不用管。 library.h文件 #ifndef HELLO_LIB_LIBRARY_H #define HELLO_LIB_LIBRARY_H#ifndef EXPORTTING #define DECLSPEC __declspec(dllimport) #else #define DECLSPEC __declspec(dllexport) #endif // EXPORTTING #include stringclass DECLSPEC Test { public:explicit Test(std::string str);std::string getStr() ;static int getNum() ; private:std::string str_;static int num; // count value };void DECLSPEC print(); #endif //HELLO_LIB_LIBRARY_H需要额外的添加__declspec(dllexport)指示这个类/函数是一个可导出类或函数以便在dll中导出它的接口同时在lib中有对应的符号信息只有添加了它MSVC才会生成必需的.lib导入库。同时在使用这个库的项目中引用相关的头文件也需要添加__declspec(dllimport)来导入所需的数据没有这个扩展的话在一些场景时会出现无法解析符号的错误比如静态数据的导出等所以为了方便使用同一个头文件在这里采用一个宏来标识这两者的切换时刻。构建库时导出__declspec(dllexport)使用库时导入__declspec(dllimport) 修改CMakeLists文件 cmake_minimum_required(VERSION 3.26) project(library)set(CMAKE_CXX_STANDARD 11) # SHARED 共享库 add_library(library SHARED library.cpp) # 加入预定义宏 EXPORTTING add_definitions(-DEXPORTTING )在对应环境下采用Cmake工具 构建即可得到对应环境下的动态库文件比如Windows环境下会生成.lib文件和.dll文件.lib直接和静态库的配置方式一样在CMakeLists中修改即可而将.dll文件直接放置在可执行文件同一路径下即可隐式链接、调用。而在Linux环境中只会生成一个.so文件其在其他项目的cmake使用配置与静态库配置一致。 前面提到的cmake工具构建构建涉及的命令可以归纳为以下步骤 # 在项目根目录下执行# 创建build目录 并进行构建 cmake -Bbuild# 执行 make 即可完成构建 # 方式一 cd build make # 方式二 build 是构建目录 lib_test 是构建目标名 cmake --build build --target lib_test -j 8 它们的不同 链接时刻不同静态库会在编译期完成拷贝与链接而动态库会在运行时按需载入。可执行文件大小不同静态库需要整体进行拷贝成为可执行文件的一部分而动态库无需拷贝多次拷贝一次而后其他程序进行共享故对于同一个库采用动态链接会使得体积相比静态库更小。执行速度不同静态库在编译期间已经完成链接而动态库则会有额外的动态载入开销所以相对来说静态链接库更快。库更新的影响不同静态库因为会成为可执行文件的一部分所以其更新的时候会导致可执行文件也需要重新编译而动态库只需更新版本即可接口不变。 参考文章 Linux 中的动态链接库和静态链接库是干什么的 - 知乎 (zhihu.com)c - Difference between static and shared libraries? - Stack Overflow动态库与静态库编译与使用实验 - River’s Blog (riverj.top)
http://www.tj-hxxt.cn/news/221145.html

相关文章:

  • 厦门网站制作公司如何申请营业执照
  • 免费文档模板素材网站angularjs 做团购网站
  • php网站制作实例教程wordpress调用文章缩略图
  • 常州二建建设有限公司官方网站网站域名到期如何续费
  • 河东苏州网站建设宝塔面板加wordpress
  • 超低价的锦州网站建设天猫网站建设的目标是什么
  • 众网站ppt超链接至网站怎么做
  • 科技公司网站模板下载保定全员核酸检测
  • 网站轮播图制作漳州违法建设举报网站
  • 网站导航栏下拉菜单企业做推广哪些网站比较好
  • 提供手机网站怎么做20元备案域名
  • 溧阳网站建设公司wordpress limit
  • 漳州建网站太原做手机网站设计
  • 怎么在百度上搜到自己的网站网站建设 豫icp备
  • 苏州相城网站建设网站关键词设置几个
  • 唯品会网站建设的目的如何选择网站开发
  • 佛山网站优化效果自己电脑做服务器网站吗
  • 为什么一个网站做中英文双语版人工智能培训课程
  • 网站建设学什么的工商注册费用多少钱
  • 2022年免费网站软件下载公众号模板网站
  • 国外英文网站锦州网站建设品牌好
  • 如何制作h5做网站网站编辑的栏目怎么做
  • 广告公司资质wordpress的seo收件箱
  • 网站制作的网站免费做图片链接网站
  • 推广网站建设网站开发文件综述
  • 东莞小学网站建设网站域名需要购买吗
  • 福建省教师空间建设网站精美网页源码网站
  • 毕业设计报告网站开发wordpress瓶颈
  • 网站建设与设计试题先做网站先备案
  • 做网站算新媒体运营吗网站底部版权信息格式