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
### VSCodeC++ 编译环境配置教程 在 Visual Studio Code (VSCode) 中配置 C++编译环境是一个常见的需求。以下是详细的说明: #### 安装必要的工具链 为了支持 C++ 开发,需要安装以下组件: - **MinGW 工具链**:提供 GCC 和 GDB 支持,用于编译和调试 C++ 程序[^2]。 - `mingw32-gcc.bin`(C 文件编译器) - `mingw32-gcc-g++.bin`(C++ 文件编译器) - `mingw32-gdb.bin`(GDB 调试器) 这些工具可以通过 MinGW 或 MSYS2 进行安装。 #### 配置 VSCode 扩展 1. 安装官方扩展 **C/C++** 提供 IntelliSense 功能以及基础构建支持[^1]。 ```plaintext Extensions -> Search for "C/C++" by Microsoft -> Install ``` 2. 如果计划使用 Makefile 构建项目,则需额外安装 **CMake Tools** 和 **CMake Extension Pack**: ```plaintext Extensions -> Search for "CMake Tools" and install it. ``` #### 设置工作区文件夹结构 对于基于 CMake 的项目,推荐的工作目录如下所示: ``` project/ ├── src/ # 存放源码 (.cpp, .h) │ └── main.cpp # 主程序入口点 ├── build/ # 自动化生成的中间产物存储位置 └── CMakeLists.txt # 描述项目的依赖关系与目标定义 ``` #### 创建并编辑 CMakeLists.txt 这是核心部分之一,它描述了如何处理您的代码库。下面给出一个简单的例子来演示单个可执行二进制的应用场景: ```cmake # 设定最低版本号要求 cmake_minimum_required(VERSION 3.0) # 声明项目名称及其主要编程语言 project(MyProject LANGUAGES CXX) # 添加子目录下的所有源文件到名为 'my_project' 的可执行文件里去 add_executable(my_project src/main.cpp) ``` #### 修改 settings.json 来指定路径变量 打开命令面板 (`Ctrl+Shift+P`) 并运行 “Preferences: Open Settings (JSON)” ,添加自定义设置以便于识别本地安装好的 GNU Compiler Collection 及其关联部件的位置: ```json { "terminal.integrated.env.windows": { "PATH": "${env:PATH};C:\\path\\to\\your\\mingw-w64\\bin" }, "C_Cpp.default.compilerPath": "C:/path/to/mingw/bin/g++.exe", "C_Cpp.default.includePath": [ "C:/path/to/mingw/lib/gcc/x86_64-w64-mingw32/include/" ] } ``` > 注意替换上述示例中的具体路径为你实际下载解压后的地址! #### 测试整个流程是否成功运作 最后一步就是验证一切正常运转无误。新建终端窗口尝试输入 cmake .. && make 查看能否顺利产出最终成果物;或者借助快捷键 F5 启动内置调试会话直接观察效果. ```bash cd project/build cmake .. make ./my_project.exe ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值