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

相关文章

Python调用Orator ORM进行数据库操作

《Python调用OratorORM进行数据库操作》OratorORM是一个功能丰富且灵活的PythonORM库,旨在简化数据库操作,它支持多种数据库并提供了简洁且直观的API,下面我们就... 目录Orator ORM 主要特点安装使用示例总结Orator ORM 是一个功能丰富且灵活的 python O

Nginx设置连接超时并进行测试的方法步骤

《Nginx设置连接超时并进行测试的方法步骤》在高并发场景下,如果客户端与服务器的连接长时间未响应,会占用大量的系统资源,影响其他正常请求的处理效率,为了解决这个问题,可以通过设置Nginx的连接... 目录设置连接超时目的操作步骤测试连接超时测试方法:总结:设置连接超时目的设置客户端与服务器之间的连接

Java调用DeepSeek API的最佳实践及详细代码示例

《Java调用DeepSeekAPI的最佳实践及详细代码示例》:本文主要介绍如何使用Java调用DeepSeekAPI,包括获取API密钥、添加HTTP客户端依赖、创建HTTP请求、处理响应、... 目录1. 获取API密钥2. 添加HTTP客户端依赖3. 创建HTTP请求4. 处理响应5. 错误处理6.

使用 sql-research-assistant进行 SQL 数据库研究的实战指南(代码实现演示)

《使用sql-research-assistant进行SQL数据库研究的实战指南(代码实现演示)》本文介绍了sql-research-assistant工具,该工具基于LangChain框架,集... 目录技术背景介绍核心原理解析代码实现演示安装和配置项目集成LangSmith 配置(可选)启动服务应用场景

如何通过海康威视设备网络SDK进行Java二次开发摄像头车牌识别详解

《如何通过海康威视设备网络SDK进行Java二次开发摄像头车牌识别详解》:本文主要介绍如何通过海康威视设备网络SDK进行Java二次开发摄像头车牌识别的相关资料,描述了如何使用海康威视设备网络SD... 目录前言开发流程问题和解决方案dll库加载不到的问题老旧版本sdk不兼容的问题关键实现流程总结前言作为

SpringBoot中使用 ThreadLocal 进行多线程上下文管理及注意事项小结

《SpringBoot中使用ThreadLocal进行多线程上下文管理及注意事项小结》本文详细介绍了ThreadLocal的原理、使用场景和示例代码,并在SpringBoot中使用ThreadLo... 目录前言技术积累1.什么是 ThreadLocal2. ThreadLocal 的原理2.1 线程隔离2

springboot将lib和jar分离的操作方法

《springboot将lib和jar分离的操作方法》本文介绍了如何通过优化pom.xml配置来减小SpringBoot项目的jar包大小,主要通过使用spring-boot-maven-plugin... 遇到一个问题,就是每次maven package或者maven install后target中的ja

Deepseek R1模型本地化部署+API接口调用详细教程(释放AI生产力)

《DeepseekR1模型本地化部署+API接口调用详细教程(释放AI生产力)》本文介绍了本地部署DeepSeekR1模型和通过API调用将其集成到VSCode中的过程,作者详细步骤展示了如何下载和... 目录前言一、deepseek R1模型与chatGPT o1系列模型对比二、本地部署步骤1.安装oll

SpringBoot+MyBatis-Flex配置ProxySQL的实现步骤

《SpringBoot+MyBatis-Flex配置ProxySQL的实现步骤》本文主要介绍了SpringBoot+MyBatis-Flex配置ProxySQL的实现步骤,文中通过示例代码介绍的非常详... 目录 目标 步骤 1:确保 ProxySQL 和 mysql 主从同步已正确配置ProxySQL 的

Spring Boot整合log4j2日志配置的详细教程

《SpringBoot整合log4j2日志配置的详细教程》:本文主要介绍SpringBoot项目中整合Log4j2日志框架的步骤和配置,包括常用日志框架的比较、配置参数介绍、Log4j2配置详解... 目录前言一、常用日志框架二、配置参数介绍1. 日志级别2. 输出形式3. 日志格式3.1 PatternL