VSCode编译C++连接lib文件

期货CTP在Windows上需要连接静态链接库,在VS2022一切正常,在VSCode却始终失败。
原因是Windows系统的dll用的vs编译器,导出的Dll没有用extern c ,gcc 编译各种坑。
最后通过在VSCode中配置VS2022的编译器,才终于成功。

VSCode项目文件夹下新建目录.vscode,目录下新建文件 settings.json 这样就可以只配置当前项目。
我习惯用Code Runner来运行代码,所以直接修改Code Runner的运行方式,在settings.json添加以下内容:

{"code-runner.executorMap": {"cpp": "cl $fileName /Fe$fileNameWithoutExt.exe /link /LIBPATH:d:/work_vscode/CTP/api thostmduserapi_se.lib thosttraderapi_se.lib && $fileNameWithoutExt.exe"}
}

/LIBPATH 后是链接库目录,后面2个是要链接的2个lib文件。
&& $fileNameWithoutExt.exe 表示前面命令完成后 执行生成的exe程序。
如果不想看到无关的提示输出,可以在&&前加上 >nul 2>&1

cl是vs2022得编译器,注意c后面是字母L的小写,不是数字1。接下来找到cl的路径,添加到系统环境变量。
我的路径是:C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.39.33519\bin\Hostx64\x64
在cmd命令行输入 cl 验证是否添加成功。

微软官方msdn上介绍cl的使用方法是”开始“-”所有程序“-“Visual Studio 2013”-"Visual Studio Tools"再以管理员身份运行”VS2013开发人员命令提示”,之后可以正常用cl编译代码。

但在vscode运行cpp代码,依然会有问题,提示找不到头文件和库文件。

其实官方运行cl的方法是在运行cl之前执行了一个bat脚本D:\EEProgram\vsdesktop\Common7\Tools\VsDevCmd.bat,这个脚本设置了一些环境变量,除了path,还有INCLUDE 头文件的路径,LIB 库文件的路径。

在vscode或cmd中用cl命令会出现以下问题:

  • fatal error C1034: Windows.h: 不包括路径集
  • fatal error C1083: 无法打开包括文件: “winapifamily.h”
  • fatal error C1083: 无法打开包括文件: “excpt.h”
  • fatal error C1083: 无法打开包括文件: “ctype.h”

我的电脑上
Windows.h 所在目录 ·C:\Program Files (x86)\Windows Kits\10\Include\10.0.22621.0\um
winapifamily.h 所在目录 C:\Program Files (x86)\Windows Kits\10\Include\10.0.22621.0\shared
excpt.h 在vs2022的目录下 C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.39.33519\include
ctype.h 所在目录 C:\Program Files (x86)\Windows Kits\10\Include\10.0.22621.0\ucrt

新建环境变量 INCLUDE,把上面的路径作为值,一次性添加时用分号隔开

接下来是链接库的问题

  • fatal error LNK1104: 无法打开文件“uuid.lib”
  • fatal error LNK1104: 无法打开文件“LIBCMT.lib”
  • fatal error LNK1104: 无法打开文件“libucrt.lib”

uuid.lib 所在目录 C:\Program Files (x86)\Windows Kits\10\Lib\10.0.22621.0\um\x64
LIBCMT.lib 在vs2022的目录下 C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.39.33519\lib\x64
libucrt.lib 所在目录 C:\Program Files (x86)\Windows Kits\10\Lib\10.0.22621.0\ucrt\x64

新建环境变量 LIB,把上面的路径作为值,一次性添加时用分号隔开

注意:每次添加环境变量后,需要关闭vscode,然后再打开才能生效。用cmd也一样,需要重开cmd才有效。

现在已经完成编译了,但有个小问题,编译出来的程序,比在vs2022上的Release模式下编译的程序要大10多倍,即使用上cl的各种优化参数,结果变得更大了。所以在vscode上用cl编译,只适合做研发。最终发布最好还是在vs2022中完成。

参考资料:

  • https://blog.csdn.net/zhouyang209117/article/details/17737413

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/5628.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

判断循环链表以及其环入口

文章目录 题目题目链接题目要求 解题思路方法一:哈希表方法二:双指针 进阶思考快指针一次走三步 进阶问题(入口点)题目链接题目要求问题思路 总结 题目 题目链接 环形链表 题目要求 解题思路 显而易见的是,单纯的遍…

day7 c++

整理代码 1、unique_ptr 指针 #include <iostream> #include <memory> using namespace std; class Demo {public:Demo(){cout<<"无参构造"<<endl;}~Demo(){cout<<"Demo的析构函数"<<endl;} };int main() {//unique…

python 笔记:cls VS self

cls&#xff1a; 用于类方法&#xff1a; cls 通常作为类方法&#xff08;用 classmethod 装饰&#xff09;中的第一个参数。它指代调用该方法的类本身&#xff0c;无论该类有没有被实例化访问类级别的属性和方法 通过 cls&#xff0c;可以访问类级别的属性和方法。可以通过 c…

【IDEA】IDEA自带Maven/JDK,不需要下载

IDEA是由Java编写的&#xff0c;为了保证其运行&#xff0c;内部是自带JDK的。IDEA 2021 及 之后的版本是自带Maven的&#xff1a; 视频连接&#xff1a; https://www.bilibili.com/video/BV1Cs4y1b7JC?p4&spm_id_frompageDriver&vd_source5534adbd427e3b01c725714cd…

理解Linux文件系统

文章目录 一、引言二、Linux文件系统概述1、文件系统的结构2、文件系统目录树的逻辑结构 二、文件系统的特性1、super block&#xff1a;文件系统的超级块2、inode&#xff1a;文件系统的索引节点3、inode table4、block&#xff1a;文件系统的数据块5、块组描述符表&#xff0…

链表例题(分割链表)

链接&#xff1a; . - 力扣&#xff08;LeetCode&#xff09; 题目描述&#xff1a; 即将小于特定值的节点放在前面&#xff0c;大于特定值的节点接在后面 思路&#xff1a; 我们可以创建两个链表分别存放大于的值和小于的值。5个变量&#xff08;记录链表当前位置的指针st…

Spring Kafka——基于 Spring Kafka 实现动态管理 Kafka 连接和 topic 的监听

文章目录 使用 Spring Kafka 动态管理 Kafka 连接和主题监听1. 前言2. 简单的消费程序配置3. Spring Kafka 主要的相关类的说明4. KafkaListener 注解的加载执行流程解析5. 动态监听消费订阅的设计与实现 使用 Spring Kafka 动态管理 Kafka 连接和主题监听 文章内容较长&#x…

云托管 代码 项目

代码(云)托管平台 国内&#xff1a; Coding&#xff08;https://coding.net&#xff09;&#xff1a;Coding是国内知名的代码托管平台&#xff0c;支持Git和SVN版本控制系统。它提供了代码托管、项目管理、协作开发、持续集成等功能&#xff0c;并且支持与其他开发工具的集成&a…

css div块标签内的多个英语单词怎样设置换行

背景&#xff1a; 在<div>标签内&#xff0c;当接口返回的字符串全是英文字母&#xff0c;不会自动换行。 原因&#xff1a;查过相关资料后才知道&#xff0c;只有英文文本才会出现不能自动换行的情况&#xff0c;&#xff08;中文不存在&#xff09;而原因是因为英文文本…

GNU/Linux - tty设备介绍

在 Linux 和其他类 Unix 操作系统中&#xff0c;"TTY "代表 "电传打字机"。最初&#xff0c;TTY 指的是用于文本通信的物理电传打字机终端&#xff0c;但在现代用法中&#xff0c;它一般指在图形环境或基于文本的控制台中用于文本输入和输出的虚拟终端或终…

【antd + vue】InputNumber 数字输入框 输入限制

一、需求说明 只能输入数字和小数点&#xff0c;保留小数点后两位&#xff1b;最多输入6位&#xff1b;删除所有内容时&#xff0c;默认为0&#xff1b; 二、问题说明 问题1&#xff1a;使用 precision 数值精度 时&#xff0c;超出规定小数位数时会自动四舍五入&#xff1b;…

如何在Linux中使用Socks5代理?

Socks5代理是一種網路協議&#xff0c;用於在客戶端和服務器之間中轉網路數據包。這種代理協議可以處理任何類型的網路流量&#xff0c;包括HTTP和FTP等協議。此外&#xff0c;Socks5代理還支持各種身份驗證方法&#xff0c;包括無驗證、用戶名/密碼驗證和GSSAPI。 Socks5代理…

水库大坝安全白蚁监测系统解决方案

一、系统背景 白蚁作为河岸生态系统中的重要病害&#xff0c;不仅会导致水库大坝外部环境发生改变&#xff0c;甚至会引发水库大坝破坏&#xff0c;进而导致自身结构失去稳定性&#xff0c;严重影响水库大坝的正常运行。因此&#xff0c;治理水库大坝白蚁是确保水库大坝工程顺利…

翻译: 什么是ChatGPT 通过图形化的方式来理解 Transformer 架构 深度学习二

合集 ChatGPT 通过图形化的方式来理解 Transformer 架构 翻译: 什么是ChatGPT 通过图形化的方式来理解 Transformer 架构 深度学习一翻译: 什么是ChatGPT 通过图形化的方式来理解 Transformer 架构 深度学习二翻译: 什么是ChatGPT 通过图形化的方式来理解 Transformer 架构 深…

C++人工智能01C版本

这次新增了个游戏功能 看代码 #include"bits/stdc.h" #include"Windows.h" #define KEY_DOWN(VK_NONAME) ((GetAsyncKeyState(VK_NONAME) & 0x8000) ? 1:0) using namespace std; bool memory[11]{false}; char z[1048576]{}; void calculator(char…

在 Python 开发中建议使用虚拟环境的原因

在 Python 开发中使用虚拟环境可以解决依赖冲突问题、方便管理和记录项目依赖库版本、提高代码的可移植性和可重现性、隔离不同项目的 Python 环境、方便切换不同项目的开发环境&#xff0c;无论是个人项目还是团队项目&#xff0c;使用虚拟环境已经成为 Python 开发的最佳实践…

Julia和Python蛛网图轨道图庞加莱截面曲面确定性非线性系统

&#x1f3af;要点 &#x1f3af;确定性混沌系统计算和视图&#xff1a;&#x1f58a;庞加莱截面曲面&#xff0c;赫农-海尔斯系统和洛伦兹 63 系统。&#x1f3af;零斜线演示可激发系统计算和视图&#xff1a;&#x1f58a; 庞加莱-本迪克松定理求解二维连续系统常微分方程 |…

STM32中断之TIM定时器详解

系列文章目录 STM32单片机系列专栏 C语言术语和结构总结专栏 文章目录 1. TIM简述 2. 定时器类型 2.1 基本定时器 2.2 通用定时器 2.3 高级定时器 3. 定时中断 4. 代码示例1 5. 代码示例2 1. TIM简述 定时器的基本功能&#xff1a;定时器可以在预定的时间间隔内产生周…

谷歌研发“SEEDS”新型天气预报模型:更准确地报道极端事件

谷歌科技近日公布了一项震撼业界的天气预报研究成果&#xff0c;这一成果不仅标志着天气预测技术的重大突破&#xff0c;更是人工智能技术在传统领域应用的又一里程碑。他们成功研发了名为SEEDS&#xff08;Scalable Ensemble Envelope Diffusion Sampler&#xff09;的新型预报…

【AIGC】深入探索AIGC技术在文本生成与音频生成领域的应用

&#x1f680;文章标题 &#x1f680;AIGC之文本生成&#x1f680;应用型文本生成&#x1f680;创作型文本生成&#x1f680;文本辅助生成&#x1f680;重点关注场景 &#x1f680;音频及文字—音频生成&#x1f680;TTS(Text-to-speech)场景&#x1f680;乐曲/歌曲生成&#x…