VSCode编译C++连接lib文件

文章讲述了作者在VSCode中使用VS2022编译器处理期货CTP项目时遇到的链接库问题,涉及环境变量配置、头文件和库文件路径,以及编译后程序大小的差异。最终建议在正式发布时使用VS2022进行编译。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

期货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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值