VS2017 静态链接库(.lib)的制作和调用,并对环境配置进行试验

2024-04-20 20:18

本文主要是介绍VS2017 静态链接库(.lib)的制作和调用,并对环境配置进行试验,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

VS2017 静态链接库(.lib)的制作和调用,并对环境配置进行试验

首先说一下本人测试的结论:
生成静态链接库时将环境设置为 Debug x64,创建空项目时,将环境设置为Debug x64,运行成功,设置为Release x64,运行失败。
生成静态链接库时将环境设置为Release x64,创建空项目时,将环境设置为Debug x64,运行失败,设置为Release x64,运行成功。
因此,生成静态库的环境设置要与空项目的环境设置相同。

第一步:新建静态库
1、打开VS2017,新建一个项目,选择Windows桌面→静态库,输入项目名StaticLib-1,选择位置,点击确定。
在这里插入图片描述
2、将环境设置为 Debug x64
在这里插入图片描述
3、添加头文件stack.h
在这里插入图片描述
头文件输入:
#pragma once
#include"stdafx.h" //特别要注意:把#include"stdafx.h" 放在最前面,否则可能出错;
class Stack
{
private:
int *data; //存放栈数据
int count; //存放栈顶指针
int size; //栈的容量
public:
Stack(int stacksize = 10); //构造函数建立具有10元素的默认栈
~Stack();
void Push(int x); //元素入栈
int Pop(); //元素出栈
int howMany(); //判定栈中有多个元素
};

4、添加源文件:stack.cpp
在这里插入图片描述
源文件输入:(在源文件中添加函数的实现)
//堆栈stack的源文件:stack.cpp
#include"stdafx.h" //特别要注意:把#include"stdafx.h" 放在最前面;
#include “stack.h” //包含头文件
#include //push和pop都用到了cout,所以包含此头文件
using namespace std;
Stack::Stack(int stacksize)
{
if (stacksize > 0)
{
size = stacksize;
data = new int[stacksize];
for (int i = 0; i < size; i++)
data[i] = 0;
}
else
{
data = 0;
size = 0;
}
count = 0;
}

Stack::~Stack()
{
delete[]data;
}
void Stack::Push(int x)
{
if (count < size)
{
data[count] = x;
count++;
}
else
{
cout << "堆栈已满,不能再压入数据: " << x << endl;
}
}
int Stack::Pop()
{
if (count <= 0)
{
cout << “堆栈已空!” << endl;
exit(1); //堆栈操作失败,退出程序!
}
count–;
return data[count];
}
int Stack::howMany()
{
return count;
}

5、右键项目,点击生成;
在这里插入图片描述
生成:成功1个;
在这里插入图片描述
在E:\1-C++\VS2017 静态库的制作\StaticLib-1\x64\Debug 下,有生成的StaticLib-1.lib 。
在这里插入图片描述
第二步:新建空项目
6、新建一个空项目,命名为StackLib-1-test
在这里插入图片描述
7、在源文件目录下(E:\1-C++\VS2017 静态库的制作\StaticLib-1-test\StaticLib-1-test)新建一个存放头文件的文件夹,假设为h,将stack.h、stdafx.h和targetver.h复制到h中,并将头文件添加到项目的头文件中;
在这里插入图片描述
8、在源文件目录下(E:\1-C++\VS2017 静态库的制作\StaticLib-1-test\StaticLib-1-test)新建一个存放静态库文件.lib的文件夹,假设为lib,生成的StaticLib-1.lib放在该文件夹中;
在这里插入图片描述
9、导入现有属性表:
右击Debug|x64,添加现有属性表,选择E:\2-opencv\props中的opencv3.4.1_contrib3.4.1_opengl_Debugx64.props
(这是我自己之前创建并保存的一个属性表,也可以参考https://blog.csdn.net/tangyanzhi1111/article/details/78962208
中的三步走:
A、添加工程的头文件目录:工程—属性—配置属性—c/c+±–常规—附加包含目录:加上头文件存放目录。
B、添加文件引用的lib静态库路径:工程—属性—配置属性—链接器—常规—附加库目录:加上lib文件存放目录。
C 然后添加工程引用的lib文件名:工程—属性—配置属性—链接器—输入—附加依赖项:加上lib文件名)
在这里插入图片描述
10、双击opencv3.4.1_contrib3.4.1_opengl_Debugx64,然后:
A、添加工程的头文件目录:工程—属性—配置属性—c/c+±–常规—附加包含目录:加上头文件存放目录。
B、添加文件引用的lib静态库路径:工程—属性—配置属性—链接器—常规—附加库目录:加上lib文件存放目录。
C 然后添加工程引用的lib文件名:工程—属性—配置属性—链接器—输入—附加依赖项:加上lib文件名
在这里插入图片描述
11、新建源文件:stackmain.cpp
///应用栈类的主程序:stackmain.cpp
#include"stdafx.h" //必须加上;
#include “stack.h”
#include
using namespace std;
void main()
{
Stack s1;
s1.Push(1);
s1.Push(12);
s1.Push(32);
int x1 = s1.Pop();
int x2 = s1.Pop();
int x3 = s1.Pop();
cout << x1 << “\t” << x2 << “\t” << x3 << endl;
system(“PAUSE”);
}

12、环境配置选择: Debug x64 ,然后运行:
在这里插入图片描述
运行成功:
在这里插入图片描述
结论: 生成静态链接库时将环境设置为 Debug x64,创建空项目时,也将环境设置为Debug x64,运行成功。

13、重复第9步,对Release|x64属性进行配置
右击Release|x64,添加现有属性表,选择E:\2-opencv\props中的opencv3.4.1_contrib3.4.1_opengl_Releasex64.props
然后重复第10步,
环境配置选为:Release x64,点击运行, 运行不成功。
结论:生成静态链接库时将环境设置为 Debug x64,创建空项目时,将环境设置为Release x64,运行失败。

14、重复第1步到13步,在静态链接库制作时环境配置选为Release x64
在这里插入图片描述
静态链接库生成成功:
在这里插入图片描述
在E:\1-C++\VS2017 静态库的制作\StaticLib-2\x64\Release中有生成的.lib文件:
在这里插入图片描述

这次将空项目的环境配置设为:Debug x64
在这里插入图片描述
运行,运行不成功
在这里插入图片描述
再将环境配置设为:Release x64
在这里插入图片描述
运行,运行成功。
在这里插入图片描述
结论:生成静态链接库时将环境设置为Release x64,创建空项目时,将环境设置为Debug x64,运行不成功,设置为Release x64,运行成功。

这篇关于VS2017 静态链接库(.lib)的制作和调用,并对环境配置进行试验的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/921222

相关文章

MySQL数据库双机热备的配置方法详解

《MySQL数据库双机热备的配置方法详解》在企业级应用中,数据库的高可用性和数据的安全性是至关重要的,MySQL作为最流行的开源关系型数据库管理系统之一,提供了多种方式来实现高可用性,其中双机热备(M... 目录1. 环境准备1.1 安装mysql1.2 配置MySQL1.2.1 主服务器配置1.2.2 从

一篇文章彻底搞懂macOS如何决定java环境

《一篇文章彻底搞懂macOS如何决定java环境》MacOS作为一个功能强大的操作系统,为开发者提供了丰富的开发工具和框架,下面:本文主要介绍macOS如何决定java环境的相关资料,文中通过代码... 目录方法一:使用 which命令方法二:使用 Java_home工具(Apple 官方推荐)那问题来了,

Nginx搭建前端本地预览环境的完整步骤教学

《Nginx搭建前端本地预览环境的完整步骤教学》这篇文章主要为大家详细介绍了Nginx搭建前端本地预览环境的完整步骤教学,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录项目目录结构核心配置文件:nginx.conf脚本化操作:nginx.shnpm 脚本集成总结:对前端的意义很多

Linux云服务器手动配置DNS的方法步骤

《Linux云服务器手动配置DNS的方法步骤》在Linux云服务器上手动配置DNS(域名系统)是确保服务器能够正常解析域名的重要步骤,以下是详细的配置方法,包括系统文件的修改和常见问题的解决方案,需要... 目录1. 为什么需要手动配置 DNS?2. 手动配置 DNS 的方法方法 1:修改 /etc/res

mysql8.0.43使用InnoDB Cluster配置主从复制

《mysql8.0.43使用InnoDBCluster配置主从复制》本文主要介绍了mysql8.0.43使用InnoDBCluster配置主从复制,文中通过示例代码介绍的非常详细,对大家的学习或者... 目录1、配置Hosts解析(所有服务器都要执行)2、安装mysql shell(所有服务器都要执行)3、

java程序远程debug原理与配置全过程

《java程序远程debug原理与配置全过程》文章介绍了Java远程调试的JPDA体系,包含JVMTI监控JVM、JDWP传输调试命令、JDI提供调试接口,通过-Xdebug、-Xrunjdwp参数配... 目录背景组成模块间联系IBM对三个模块的详细介绍编程使用总结背景日常工作中,每个程序员都会遇到bu

MyBatis/MyBatis-Plus同事务循环调用存储过程获取主键重复问题分析及解决

《MyBatis/MyBatis-Plus同事务循环调用存储过程获取主键重复问题分析及解决》MyBatis默认开启一级缓存,同一事务中循环调用查询方法时会重复使用缓存数据,导致获取的序列主键值均为1,... 目录问题原因解决办法如果是存储过程总结问题myBATis有如下代码获取序列作为主键IdMappe

JDK8(Java Development kit)的安装与配置全过程

《JDK8(JavaDevelopmentkit)的安装与配置全过程》文章简要介绍了Java的核心特点(如跨平台、JVM机制)及JDK/JRE的区别,重点讲解了如何通过配置环境变量(PATH和JA... 目录Java特点JDKJREJDK的下载,安装配置环境变量总结Java特点说起 Java,大家肯定都

Python进行word模板内容替换的实现示例

《Python进行word模板内容替换的实现示例》本文介绍了使用Python自动化处理Word模板文档的常用方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友... 目录技术背景与需求场景核心工具库介绍1.获取你的word模板内容2.正常文本内容的替换3.表格内容的

linux配置podman阿里云容器镜像加速器详解

《linux配置podman阿里云容器镜像加速器详解》本文指导如何配置Podman使用阿里云容器镜像加速器:登录阿里云获取专属加速地址,修改Podman配置文件并移除https://前缀,最后拉取镜像... 目录1.下载podman2.获取阿里云个人容器镜像加速器地址3.更改podman配置文件4.使用po