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

相关文章

Java中读取YAML文件配置信息常见问题及解决方法

《Java中读取YAML文件配置信息常见问题及解决方法》:本文主要介绍Java中读取YAML文件配置信息常见问题及解决方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要... 目录1 使用Spring Boot的@ConfigurationProperties2. 使用@Valu

linux解压缩 xxx.jar文件进行内部操作过程

《linux解压缩xxx.jar文件进行内部操作过程》:本文主要介绍linux解压缩xxx.jar文件进行内部操作,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、解压文件二、压缩文件总结一、解压文件1、把 xxx.jar 文件放在服务器上,并进入当前目录#

SpringBoot中如何使用Assert进行断言校验

《SpringBoot中如何使用Assert进行断言校验》Java提供了内置的assert机制,而Spring框架也提供了更强大的Assert工具类来帮助开发者进行参数校验和状态检查,下... 目录前言一、Java 原生assert简介1.1 使用方式1.2 示例代码1.3 优缺点分析二、Spring Fr

Jenkins分布式集群配置方式

《Jenkins分布式集群配置方式》:本文主要介绍Jenkins分布式集群配置方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1.安装jenkins2.配置集群总结Jenkins是一个开源项目,它提供了一个容易使用的持续集成系统,并且提供了大量的plugin满

SpringBoot线程池配置使用示例详解

《SpringBoot线程池配置使用示例详解》SpringBoot集成@Async注解,支持线程池参数配置(核心数、队列容量、拒绝策略等)及生命周期管理,结合监控与任务装饰器,提升异步处理效率与系统... 目录一、核心特性二、添加依赖三、参数详解四、配置线程池五、应用实践代码说明拒绝策略(Rejected

SQL Server配置管理器无法打开的四种解决方法

《SQLServer配置管理器无法打开的四种解决方法》本文总结了SQLServer配置管理器无法打开的四种解决方法,文中通过图文示例介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的... 目录方法一:桌面图标进入方法二:运行窗口进入检查版本号对照表php方法三:查找文件路径方法四:检查 S

Java中调用数据库存储过程的示例代码

《Java中调用数据库存储过程的示例代码》本文介绍Java通过JDBC调用数据库存储过程的方法,涵盖参数类型、执行步骤及数据库差异,需注意异常处理与资源管理,以优化性能并实现复杂业务逻辑,感兴趣的朋友... 目录一、存储过程概述二、Java调用存储过程的基本javascript步骤三、Java调用存储过程示

Linux中SSH服务配置的全面指南

《Linux中SSH服务配置的全面指南》作为网络安全工程师,SSH(SecureShell)服务的安全配置是我们日常工作中不可忽视的重要环节,本文将从基础配置到高级安全加固,全面解析SSH服务的各项参... 目录概述基础配置详解端口与监听设置主机密钥配置认证机制强化禁用密码认证禁止root直接登录实现双因素

SQLite3 在嵌入式C环境中存储音频/视频文件的最优方案

《SQLite3在嵌入式C环境中存储音频/视频文件的最优方案》本文探讨了SQLite3在嵌入式C环境中存储音视频文件的优化方案,推荐采用文件路径存储结合元数据管理,兼顾效率与资源限制,小文件可使用B... 目录SQLite3 在嵌入式C环境中存储音频/视频文件的专业方案一、存储策略选择1. 直接存储 vs

嵌入式数据库SQLite 3配置使用讲解

《嵌入式数据库SQLite3配置使用讲解》本文强调嵌入式项目中SQLite3数据库的重要性,因其零配置、轻量级、跨平台及事务处理特性,可保障数据溯源与责任明确,详细讲解安装配置、基础语法及SQLit... 目录0、惨痛教训1、SQLite3环境配置(1)、下载安装SQLite库(2)、解压下载的文件(3)、