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
在 Visual Studio Code 中添加头文件和 DLL 文件,您需要通过以下步骤完成: 1. 打开 Visual Studio Code,打开您的项目文件夹。 2. 在项目文件夹中创建一个名为 `.vscode` 的文件夹,用于存放 Visual Studio Code 的配置文件。 3. 在 `.vscode` 文件夹中创建一个名为 `c_cpp_properties.json` 的文件,用于配置 C/C++ 的属性。 4. 打开 `c_cpp_properties.json` 文件,将以下代码粘贴到文件中: ```json { "configurations": [ { "name": "Win32", "includePath": [ "${workspaceFolder}/**", "C:/path/to/header/files" ], "defines": [], "compilerPath": "C:/path/to/your/compiler", "cStandard": "c11", "cppStandard": "c++17", "intelliSenseMode": "msvc-x64", "browse": { "path": [ "${workspaceFolder}" ], "limitSymbolsToIncludedHeaders": true, "databaseFilename": "" } } ], "version": 4 } ``` 其中,`includePath` 指定了头文件的搜索路径,`compilerPath` 指定了编译器的路径。您需要将 `C:/path/to/header/files` 替换为您的头文件所在的路径,将 `C:/path/to/your/compiler` 替换为您的编译器所在的路径。 5. 在项目文件夹中创建一个名为 `lib` 的文件夹,用于存放 DLL 文件。 6. 将您的 DLL 文件复制到 `lib` 文件夹中。 7. 打开您的项目文件夹中的 `tasks.json` 文件,将以下代码粘贴到文件中: ```json { "version": "2.0.0", "tasks": [ { "label": "build", "type": "shell", "command": "gcc -o ${workspaceFolder}/out/main.exe ${workspaceFolder}/src/*.c -I${workspaceFolder} -L${workspaceFolder}/lib -lmydll", "group": { "kind": "build", "isDefault": true } } ] } ``` 其中,`-I` 指定头文件路径,`-L` 指定库文件路径,`-l` 指定链接的库文件名。您需要将 `mydll` 替换为您的 DLL 文件名(不包含文件扩展名)。 8. 在 Visual Studio Code 中,按 `Ctrl + Shift + B` 快捷键,选择 `build` 任务,即可编译您的项目并链接 DLL 文件
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值