首页 > 编程语言 >C++基础-如何引入第三方静态库、动态库或自定义库 摘自 https://blog.csdn.net/u013102711/article/details/128961930

C++基础-如何引入第三方静态库、动态库或自定义库 摘自 https://blog.csdn.net/u013102711/article/details/128961930

时间:2024-05-08 14:57:10浏览次数:23  
标签:u013102711 自定义 项目 静态 路径 引入 glfw 128961930 include

C++无论是内置库还是第三方库,都需要自己手动进行查找、配置、引入等工作。
本文即是帮助完成C++项目对于库、框架如何完成依赖引入达成可调用的目的,重点讲述开发工具Visual Studio中的操作

静态库(.lib)
静态库引入适用用于大部分无开源的第三方库,开发者不需要关心库的具体实现如何,直接将库文件放到自己的项目里,引入进行调用即可,非常方便可靠。
无论库是否有开源,最终能通过生成或下载拿到静态库文件.lib和头文件.h即可使用静态库引入方式。步骤如下:

已编译好的库
使用glfw作为示例官方下载地址:

将下载好的静态库文件glfw.lib和glfw.h按照想要的路径放置到解决方案里,例如【解决方案】\Dependencies\glfw\文件夹里;
在VS开发工具里打开应用程序项目属性(右键打开),找到C++》常规》附加包含目录,添加头文件所在基础路径$(SolutionDir)\Dependencies\glfw\;。注意第一是顶部要选择全部配置和全部平台,如果只选择了其中一种配置和平台可能会报错。其次是不要删除原本附加包含目录里已有的路径,只使用分号隔开,除非你确定那些路径已经不需要;
接着上一步,重新在属性里找链接器》常规》附加库目录,添加静态库文件所在基础路径$(SolutionDir)\Dependencies\glfw\;。之后找到链接器》输入》附加依赖项,添加静态库剩余路径glfw3.lib,基础路径和剩余路径合起来才是静态库的完整路径$(SolutionDir)\Dependencies\glfw\glfw3.lib;
在需要使用该库的项目文件代码里引入头文件,路径根据第2步基础路径所决定,如#include <glfw3.h>指向的是$(SolutionDir)\Dependencies\glfw\glfw3.h;
现在可以开始调用静态库里的方法了,代码示例:

#include <iostream>
#include <glfw3.h>
int main() {
int a = glfwInit();
std::cout << a << std::endl;
}

引用依赖库
适用于有源代码的库,例如第三方开源库,或者自己的库。
相比静态库有更好的灵活性,方便对库进行专门的优化或定制开发。
可以不放到当前解决方案里,直接作为单独项目生成静态库文件和头文件,然后按照上述方式引入静态库,也可以按照下面的方法,将源代码放到解决方案里作为单独一个库项目,让应用程序项目引入,这种方式的好处是根据应用程序需要修改库代码。
还是使用上一步有开源的glfw作为示例:

将下载好的库源代码放置到解决方案里,如放到【解决方案】\glfw\文件夹里;
在VS开发工具里打开该项目属性,找到常规》配置类型,将其选择为静态库(.lib),完成后按顺序点击下方应用Apply、确定OK按钮;
在VS开发工具里打开应用程序项目属性,找到C++》常规》附加包含目录,添加头文件所在基础路径$(SolutionDir)\glfw\src\;;
接着在VS开发工具应用程序项目打开引用栏(项目右键选择添加》引用),里面可以看到当前解决方案下所有库项目,包括我们第2步配置glfw库项目的名称和路径,在想要依赖的库项目前面打钩,并点击下方确定OK;
在需要使用该库的项目文件代码里引入头文件glfw3.h,路径根据第2步基础路径所决定,如#include <glfw3.h>指向的是$(SolutionDir)\glfw\src\glfw3.h;
现在可以开始调用引用依赖库的方法了,代码示例:
#include <iostream>
#include <glfw3.h>
int main() {
int a = glfwInit();
std::cout << a << std::endl;
}

标签:u013102711,自定义,项目,静态,路径,引入,glfw,128961930,include
From: https://www.cnblogs.com/bleychen/p/18179745

相关文章

  • 自定义单链表(非循环)的基本接口函数
    文件描述及头文件包含/********************************************************************* 文件名称: 单链表(非循环)的基本接口程序* 文件作者:[email protected]* 创建日期:2024/05/07* 文件功能:对单链表的增删改查功能的定义* 注意事项:No......
  • 自定义单链表(非循环)反转的基本函数接口
    题干structListNode*ReverseList(structListNode*head){if(head==NULL||head->next==NULL){returnhead;}else{structListNode*Phead=head;structListNode*temp=head->next;Phead->next=NULL;......
  • shell 脚本中使用自定义的alias别名
    摘自:https://blog.csdn.net/cscrazybing/article/details/41285287alias,假名,别名,bash的一个内建命令,用来给常用的较长的命令定义个简短的名称。alias命令的基本格式为alias[word[='command']],[]内为可选项。定义word为command的别名。若=’command’部分省略,则输出word......
  • ECharts自定义提示框浮层内容
    因为提示框内容支持字符串模板和回调函数两种形式字符串模板模板变量有{a},{b},{c},{d},{e},分别表示系列名,数据名,数据值等等,但是trigger属性为axis的时候它数据条就很多了,就可以用{a0},{a1},{a2}这样子去拿数据跟数组下标一样(官网有详细示例)示例:在`option`中的`tooltip`里边写......
  • Docker网络:Docker0、容器互联技术--link、自定义网络、实战部署Redis集群
    一、Docker网络●--理解Docker0在干净的Linux环境上安装docker(将docker的所有镜像、容器先删除,干干净净!)实验:1、查看本地网络信息ipaddr可见有三个网卡信息:lo:本地(回环)地址;ens:虚拟机或云服务器(内网)地址;docker0:docker网络地址。问题:docker是如何处理容器网络访问......
  • 【Python-Json】自定义类输入json序列化、json的读取与写入
    AI问答Questionjson支持numpy数组么Answer不幸的是,标准的JSON格式不直接支持NumPy数组.JSON是一种用于存储和交换数据的文本格式,它有限的数据类型只包括对象(object)、数组(array)、数字(number)、字符串(string)、布尔值(true/false)、空值(null)等.因此,无法直接将......
  • blazor中的PageTitle输出keywords和description,自定义组件
    在blazor的PageTitle中不具备输出keywords和description的功能,而如果直接使用<mate>标签,输出中文时会变成乱码,所以我给大家推介下面的代码解君愁:1@*<PageTitle>@Title-@AppTitle</PageTitle>*@2<HeadContent>3@(newMarkupString($"<metaname=\"keywords\"......
  • 基于1500/1200 PLC的webserver---用户自定义页面
    1.创建html页面页面需要包含字符集信息:<metahttp-equiv="content-type"content="text/html;charset=utf-8">包含AWP命令的html文件,大小限制为64KB最简单的页面自动刷新:<metahttp-equiv="Refresh"content="10">2.AWP指令AWP命令公式中""之......
  • 一起了解开源自定义表单的优势表现
    随着社会的进步和科技的发展,越来越多的中小企业希望采用更为先进的软件平台,助力企业实现高效率的流程化管理。低代码技术平台、开源自定义表单已经慢慢走入大众视野,成为一款灵活、高效的数字化转型工具。流辰信息专注于低代码技术平台的研发与创新工作,竭尽全力为通信业、电力、高......
  • VS2017+QT5.9.1 自定义loggerControl
    创建自定义类LoggerControl继承QListWidget#pragmaonce#include<QListWidget>#include"Helper.h"#include<QTime>#include<QPainter>classLoggerControl:publicQListWidget{Q_OBJECTpublic:LoggerControl(QWidget*paren......