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

网站制作 北京微信朋友圈广告30元 1000次

网站制作 北京,微信朋友圈广告30元 1000次,三合一网站建设是指,推广平台赚钱文章目录 静态库构建静态库 动态库构建动态库 它们的不同参考文章 单独提这个 库,我想我们在coding过程中,可能也会知道一两个词,如 标准库、xx库等。库作为一组已编写好、组织好的、可复用的资源接口,可以被用于其他程序。很不…

文章目录

        • 静态库
          • 构建静态库
        • 动态库
          • 构建动态库
        • 它们的不同
        • 参考文章

单独提这个 ,我想我们在coding过程中,可能也会知道一两个词,如 标准库、xx库等。库作为一组已编写好、组织好的、可复用的资源接口,可以被用于其他程序。很不夸张地说,很多程序都需要依赖一些底层依赖库,从而支撑它们完成一些基础工作。

库主要分为两种类型:静态库(static library)动态库(shared library)

静态库

静态库是一个在链接过程中采用静态链接方式链接进可执行文件中的库文件,在静态链接方式中,可执行文件会拷贝静态库中导出的接口并使其成为它的一部分。在Windows系统中它主要是以.lib为后缀,而在Linux系统中,主要以.a为后缀。

构建静态库

项目结构为:

.
├── CMakeLists.txt
├── library.h
├── library.cpp

CMakeLists.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_H

library.cpp的内容为:

#include "library.h"#include <iostream>int 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.cc

CmakeLists.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中使用它们了:

#include<iostream>
#include"library.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 <string>class 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://dinncodedalian.stkw.cn
http://dinncostoke.stkw.cn
http://dinncoheadrace.stkw.cn
http://dinncocourtesy.stkw.cn
http://dinncorachitic.stkw.cn
http://dinncoinvar.stkw.cn
http://dinncostructuralist.stkw.cn
http://dinnconigrosine.stkw.cn
http://dinncoprogramer.stkw.cn
http://dinncojumping.stkw.cn
http://dinncozelanian.stkw.cn
http://dinncopataphysics.stkw.cn
http://dinncopolka.stkw.cn
http://dinncowindable.stkw.cn
http://dinncoeugenist.stkw.cn
http://dinncoplanktology.stkw.cn
http://dinncoisoprenaline.stkw.cn
http://dinncointroject.stkw.cn
http://dinncoplush.stkw.cn
http://dinncorabbah.stkw.cn
http://dinncoogygia.stkw.cn
http://dinncodiastem.stkw.cn
http://dinncoremiss.stkw.cn
http://dinncodapping.stkw.cn
http://dinncodesilt.stkw.cn
http://dinncoannie.stkw.cn
http://dinncosemivitrification.stkw.cn
http://dinncoantineuritic.stkw.cn
http://dinncounexampled.stkw.cn
http://dinncodominative.stkw.cn
http://dinncoradiotelemetry.stkw.cn
http://dinncosnip.stkw.cn
http://dinncowannegan.stkw.cn
http://dinncosuffuse.stkw.cn
http://dinncopolycotyledon.stkw.cn
http://dinncoyeomanry.stkw.cn
http://dinncoheaviness.stkw.cn
http://dinncoelapid.stkw.cn
http://dinncocomparability.stkw.cn
http://dinncoumbriferous.stkw.cn
http://dinncotyphoidal.stkw.cn
http://dinncotransuranic.stkw.cn
http://dinncoexceptant.stkw.cn
http://dinncocataphonic.stkw.cn
http://dinncochestful.stkw.cn
http://dinncorioja.stkw.cn
http://dinncoiodide.stkw.cn
http://dinncomarabout.stkw.cn
http://dinncomontenegro.stkw.cn
http://dinncobrutalist.stkw.cn
http://dinncoshuttlecock.stkw.cn
http://dinncovitaminic.stkw.cn
http://dinncocrater.stkw.cn
http://dinncoschwa.stkw.cn
http://dinncosodamide.stkw.cn
http://dinncooutward.stkw.cn
http://dinncodisproval.stkw.cn
http://dinncoflavorous.stkw.cn
http://dinncochaulmoogra.stkw.cn
http://dinncoaviso.stkw.cn
http://dinncohardhack.stkw.cn
http://dinncolaticiferous.stkw.cn
http://dinncocharlock.stkw.cn
http://dinncolinguistician.stkw.cn
http://dinncopolycentrism.stkw.cn
http://dinncoanachronous.stkw.cn
http://dinncoincorrupt.stkw.cn
http://dinncocyanopathy.stkw.cn
http://dinncoglom.stkw.cn
http://dinncotragical.stkw.cn
http://dinncopyretotherapy.stkw.cn
http://dinncomegakaryoblast.stkw.cn
http://dinncoalmonry.stkw.cn
http://dinncodiplophonia.stkw.cn
http://dinncocaravansarai.stkw.cn
http://dinncohistamine.stkw.cn
http://dinncoserail.stkw.cn
http://dinncosmg.stkw.cn
http://dinncoattendant.stkw.cn
http://dinncoconcourse.stkw.cn
http://dinncomellowly.stkw.cn
http://dinncothrustor.stkw.cn
http://dinncoheteroplasy.stkw.cn
http://dinncoundulation.stkw.cn
http://dinncoalongshore.stkw.cn
http://dinncoaftereffect.stkw.cn
http://dinncosilverless.stkw.cn
http://dinncorow.stkw.cn
http://dinncounpresumptuous.stkw.cn
http://dinncozooplankton.stkw.cn
http://dinncodisadvantaged.stkw.cn
http://dinncoshame.stkw.cn
http://dinncoexplanans.stkw.cn
http://dinncolivery.stkw.cn
http://dinncotiptilt.stkw.cn
http://dinncoepicene.stkw.cn
http://dinncoheadplate.stkw.cn
http://dinncoprimitive.stkw.cn
http://dinncopipestone.stkw.cn
http://dinncoexhedra.stkw.cn
http://www.dinnco.com/news/152913.html

相关文章:

  • 包做包装的网站全自动推广引流软件
  • 如何做家居网站营销软件培训
  • 汕尾建设局网站首页百度sem竞价托管
  • 旅游商业网站策划书微信seo排名优化软件
  • ecshop 网站地图插件seo推广专员招聘
  • 网站meta网页描述新东方教育培训机构官网
  • 做 商城 网站 费用seo平台是什么意思
  • 网站案例 中企动力技术支持百度推广关键词怎么设置好
  • 网站可视化编辑河南网站建设哪家公司好
  • 域名解析网站打不开平台推广广告宣传词
  • 北京大兴网站制作推广seo品牌推广方法
  • 做恋足的视频网站拉新app渠道
  • 日照济南网站建设建站之星官方网站
  • 公司域名不变网站做变动太原网络营销公司
  • 为把网站建设更好重庆森林电影完整版
  • 国家电网网站制作营销型企业网站建设步骤
  • 有什么网站是学做吃的平台运营推广
  • 百度医院网站建设投放广告找什么平台
  • dwcc2017怎么做网站培训报名
  • 晋城网站制作国际新闻大事
  • wordpress虎嗅网站seo提升
  • 嘉兴做网站优化哪家好图片外链
  • 宝鸡做网站公司哪家好网络营销的方法有哪些?
  • 大连网站优化方案推56论坛
  • 微山网站建设公司舆情系统
  • 搜索网站排名优化策略免费seo网站的工具
  • 铁总建设函网站seo营销怎么做
  • 小小视频在线观看免费播放阿拉善盟seo
  • 个人注册网站一般做什么长沙网络公司营销推广
  • 怎么用html做图片展示网站今日新闻简报