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)的制作和调用,并对环境配置进行试验相关推荐

  1. MFC模块的动态链接库DLL以及静态链接库LIB编译后的调用

    静态链接库LIB和动态链接库DLL的区别,创建和示例   1.什么是静态连接库,什么是动态链接库   静态链接库与动态链接库都是共享代码的方式,如果采用静态链接库,则无论你愿不愿意,lib 中的指令都 ...

  2. 第五天2017/04/06(下午3:静态链接库(Lib))

    原文链接:http://blog.csdn.net/xiaoding133/article/details/8973436 一.静态链接库和动态链接库 1.静态链接库(.LIB):函数和数据被编译进一 ...

  3. 动态链接库dll,静态链接库lib, 导入库lib 转

    动态链接库dll,静态链接库lib, 导入库lib 在用VS编译工程的时候,我们会选择动态链接库dll,静态链接库lib(static library),可是为什么在编译动态链接库的时候也可以指定输出 ...

  4. 静态链接库(Lib) 与 动态链接库(DLL)

    静态链接库(Lib) 与 动态链接库(DLL) 一.VS中添加LIb库及头文件(外部依赖项)的步骤: 1.添加工程的头文件目录:工程-属性-配置属性-c/c+±–常规-附加包含目录:加上头文件存放目录 ...

  5. 静态链接库(Lib)和动态链接库(DLL)

    序言:本文主要讲解静态链接库和动态链接库的区别,以及怎么样编译和引用两种库,怎么样从DLL中导出函数和导出C++类. 一.静态链接库和动态链接库 1.静态链接库(.LIB):函数和数据被编译进一个二进 ...

  6. lib库反编译C语言,C语言静态链接库(lib)与动态链接库(dll)

    今天看到了之前的笔记,看到之前写的笔记,感觉自己都不认得了~~一.静态链接库(lib) 首先创建    "在VC6中创建项目:Win32 Static Library" 在项目中创 ...

  7. Python3源码编译和使用静态链接库lib动态链接库dll详细介绍

    说明: 本文主要介绍: 1.python3源码的下载和编译内核工程(pythoncore) 2.编译的lib和dll使用例子. 若需要编译源码PCBuild下其他python工程,类似参考内核工程(p ...

  8. 使用Visual studio中创建C++的静态链接库.lib文件附使用方式

    如何在Qt中使用静态库.lib(和VS一样,仅仅是操作方式略有差异) 如何在VS中创建.dll动态链接库.dll中函数与类的导出用__declspec(dllexport) 如何在Qt和VS中使用动态 ...

  9. 静态链接库(.lib)和动态链接库(.dll)的使用

    静态链接库(.lib)和动态链接库(.dll)的使用 文章目录 静态链接库(.lib)和动态链接库(.dll)的使用 一.静态链接库 1. 静态链接库概述 2. 创建静态链接库 3. 调用静态链接库 ...

最新文章

  1. Python3.5模块‘OS’‘sys’
  2. 用vue-cli3从0打造一个完整的UI库
  3. docker mysql编辑器_docker官方mysql镜像自定义配置详解
  4. jvm gc阻塞时长 占比_jvm进行转义分析需要多长时间? 可能比您想象的要长。
  5. mysql aes encrypt_mysql加密函数aes_encrypt()和aes_decrypt()使用教程
  6. 【共读Primer】52.[6.3]返回类型和return语句--返回数组指针 Page205
  7. 解决过帐时提示“无法获取内部公司交易记录的帐户”
  8. 定位CPU高问题三把斧
  9. matlab h系统控制器,Matlab的H_inf鲁棒控制器的设计.pdf
  10. 阿里云操作系统——飞天(Apsara)
  11. html梯形选项卡,css 梯形tab标签页
  12. 用python帮别人写了个文字识别程序
  13. Windows桌面共享中一些常见的抓屏技术
  14. 如何让北京小车摇号中签更容易?
  15. 2022年上半年软考报名常见问题及解答
  16. java计算机毕业设计基于安卓Android微信小程序的共享单车租赁系统uniApp
  17. webview加载html图片不显示图片,WebView加载网页不显示图片解决办法
  18. 基于Netty的聊天系统(三)协议定制----消息篇
  19. Matlab函数、子函数的定义方法
  20. 找不到网络路径计算机共享,win10 局域网共享问题 提示0x80070035 找不到网络路径...

热门文章

  1. 解决snmp不能使用外部地址访问问题
  2. Linux下用C语言做小老鼠推箱子的游戏
  3. 第十四届蓝桥杯第二期模拟赛 【python】
  4. android启动时加载引导图片并全屏显示
  5. 七日杀服务器直连教程,七日杀怎么建直连服七日杀如何建直连服_七日杀建直连服教程_游戏城...
  6. DaVinci:窗口
  7. unityTaidou(三)unity模型材质比较暗的解决方法
  8. Cannot parse 1989-04-16: Illegal instant due to time zone offset transition (A
  9. 正则表达式(国际固话和手机号码)
  10. JSP实战————留言版实现