关于Windows平台上vscode利用GCC链接第三方库的过程记录

过程记录

最近因为测试需要,我在Windows 10操作系统上利用GCC生成并安装libevent的库。我的libevent库的安装路径是D:\Softs\Develop\libevent,目录下包括binincludelib三个目录。然后我用Visual Studio 2019建了一个C项目,并配置好了libevent库。写代码进行测试,一切正常。Visual Studio 2019的相关配置如:

  1. 项目右键 >> 属性 >> VC++目录

    这一部分主要配置包含目录库目录两项,截图如下。
    关于Windows平台上vscode利用GCC链接第三方库的过程记录_第1张图片
    关于Windows平台上vscode利用GCC链接第三方库的过程记录_第2张图片

  2. 项目右键 >> 属性 >> 链接器 >> 输入
    此处主要是指定库文件的名称,对于libevent,一般使用event_core.lib即可。关于Windows平台上vscode利用GCC链接第三方库的过程记录_第3张图片
    一般来说,完成第二步,程序的编译不会有什么问题。但是运行时,会报错,并提示找不到相关的dll,图示如下。
    关于Windows平台上vscode利用GCC链接第三方库的过程记录_第4张图片
    因为dll(动态链接库)是程序运行时加载的,而在程序的运行环境中,找不到相关dll的信息,所以报错。一般来说,可以有三种方式来处理这个问题,其实都与程序运行时,相关文件的查找顺序有关系。

Windows在查找dll时,按照如下路径查找:

  1. 包含EXE文件的目录
  2. 进程的当前工作目录
  3. Windows系统目录
  4. Windows目录
  5. 列在Path环境变量中的一系列目录

如果在这些地方都找不到需要的文件,则会出现上述错误。

相应的解决方法是:第一种,将需要的dll文件拷贝到程序的运行目录下;第二种,将dll拷贝到环境变量中存在的路径中(比如C://windows//),或者为第三方库的dll配置环境变量(我的libevent的dll文件在bin目录下);第三种,则是Visual Studio的一个调试功能,它可以设置将调试的环境设置到特定的目录,我们则可以将调试环境设置为dll文件所在目录。配置如下。
关于Windows平台上vscode利用GCC链接第三方库的过程记录_第5张图片
Visual Studio平台上最终的测试代码如下:
关于Windows平台上vscode利用GCC链接第三方库的过程记录_第6张图片
编译、链接和运行都没有问题。

因为觉得Visual Studio有时候用起来过于笨重,所以考虑在vscode上搭建环境。用的编译器是GCC。vscode中安装了一个C++的插件。
关于Windows平台上vscode利用GCC链接第三方库的过程记录_第7张图片
接下来是vscode中的一系列配置过程。

  1. 配置C/C++的环境参数(c_cpp_properties.json)
    操作步骤是:快捷键Ctrl + Shift + P,调出命令面板后,找到C/C++:Edit Configurations (UI)
    关于Windows平台上vscode利用GCC链接第三方库的过程记录_第8张图片
    需要注意的是,此处的includePath仅仅是插件搜索头文件的路径,和GCC编译器没有关系(我这么认为的)。

  2. 配置构建任务(tasks.json)
    操作步骤是:Terminal >> Configure Tasks…
    关于Windows平台上vscode利用GCC链接第三方库的过程记录_第9张图片
    需要注意的是,此处圈出来的部分即GCC编译时的-I-L、和-l参数。此处区分第一点includePath配置的内容。

  3. 调试参数(launch.json)
    操作步骤:侧边栏Run and Debug中,有一个create a launch.json file的超链。点击后,需要选择环境,选择C++ (GDB/LLDB)。然后选择配置gcc.exe
    关于Windows平台上vscode利用GCC链接第三方库的过程记录_第10张图片

  4. 前三步做完,配置基本上就完成了。然后最重要的一点,不要忘了指定dll文件的路径,即上面说的找不到dll的问题。在我的电脑上,如果没有指定dll的路径,运行程序并不会出现上面的弹窗,但是运行会出现莫名其妙的问题。

参考资料

  1. GCC Linker 在Windows下的查找依赖库的规则
  2. Visual Studio提示由于找不到dll,无法继续执行代码的问题解决
  3. 谈谈GCC的-I,-L和-l选项

你可能感兴趣的:(C语言,c++,vscode,visual,studio,windows)