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进行文件格式校验的方案详解

《Java进行文件格式校验的方案详解》这篇文章主要为大家详细介绍了Java中进行文件格式校验的相关方案,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录一、背景异常现象原因排查用户的无心之过二、解决方案Magandroidic Number判断主流检测库对比Tika的使用区分zip

Java使用Curator进行ZooKeeper操作的详细教程

《Java使用Curator进行ZooKeeper操作的详细教程》ApacheCurator是一个基于ZooKeeper的Java客户端库,它极大地简化了使用ZooKeeper的开发工作,在分布式系统... 目录1、简述2、核心功能2.1 CuratorFramework2.2 Recipes3、示例实践3

SpringBoot日志配置SLF4J和Logback的方法实现

《SpringBoot日志配置SLF4J和Logback的方法实现》日志记录是不可或缺的一部分,本文主要介绍了SpringBoot日志配置SLF4J和Logback的方法实现,文中通过示例代码介绍的非... 目录一、前言二、案例一:初识日志三、案例二:使用Lombok输出日志四、案例三:配置Logback一

springboot security之前后端分离配置方式

《springbootsecurity之前后端分离配置方式》:本文主要介绍springbootsecurity之前后端分离配置方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的... 目录前言自定义配置认证失败自定义处理登录相关接口匿名访问前置文章总结前言spring boot secu

一文详解SpringBoot响应压缩功能的配置与优化

《一文详解SpringBoot响应压缩功能的配置与优化》SpringBoot的响应压缩功能基于智能协商机制,需同时满足很多条件,本文主要为大家详细介绍了SpringBoot响应压缩功能的配置与优化,需... 目录一、核心工作机制1.1 自动协商触发条件1.2 压缩处理流程二、配置方案详解2.1 基础YAML

springboot简单集成Security配置的教程

《springboot简单集成Security配置的教程》:本文主要介绍springboot简单集成Security配置的教程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,... 目录集成Security安全框架引入依赖编写配置类WebSecurityConfig(自定义资源权限规则

SpringBoot中封装Cors自动配置方式

《SpringBoot中封装Cors自动配置方式》:本文主要介绍SpringBoot中封装Cors自动配置方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录SpringBoot封装Cors自动配置背景实现步骤1. 创建 GlobalCorsProperties

Spring Boot结成MyBatis-Plus最全配置指南

《SpringBoot结成MyBatis-Plus最全配置指南》本文主要介绍了SpringBoot结成MyBatis-Plus最全配置指南,包括依赖引入、配置数据源、Mapper扫描、基本CRUD操... 目录前言详细操作一.创建项目并引入相关依赖二.配置数据源信息三.编写相关代码查zsRArly询数据库数

SpringBoot配置Ollama实现本地部署DeepSeek

《SpringBoot配置Ollama实现本地部署DeepSeek》本文主要介绍了在本地环境中使用Ollama配置DeepSeek模型,并在IntelliJIDEA中创建一个Sprin... 目录前言详细步骤一、本地配置DeepSeek二、SpringBoot项目调用本地DeepSeek前言随着人工智能技

在C#中调用Python代码的两种实现方式

《在C#中调用Python代码的两种实现方式》:本文主要介绍在C#中调用Python代码的两种实现方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录C#调用python代码的方式1. 使用 Python.NET2. 使用外部进程调用 Python 脚本总结C#调