Rekord
文章38
标签23
分类4

一言

文章分类

解决vscode引用c++外部库报错

解决vscode引用c++外部库报错

Visual Studio Code用了也有一段时间了,其中它的小巧美观给我留下了很深的印象。

最近做了两次计算机图形学实验,其中一个实验必须引用外部的图形库,但是在使用vsCode完成这样一项“简单”的工作时却报错不断:cry::cry:。甚至一度让我放弃去使用。(当然重量级的vs2017又很快将我劝回来了!:joy:)

今天总算真正决定去弄清并解决这个问题。:fist_right::fist_right:

下面是几点收获(包括原理和解决方案)

  • g++与gcc的区别

    结论:写c++选g++更好!

  • g++编译器相关命令行参数

    • -o 文件名.exe,通过-o参数指定编译后得到的exe程序名。

    • -I 外部include路径,通过-I参数指定外部include的路径,实现导入外部包的效果。

    • -L 外部lib路径,通过-L参数指定外部lib的路径,为下面的-l参数提供搜索地址。

    • -l[链接文件(去除lib前缀和.a后缀)],通过-l参数指定链接lib*.a文件,下面是一个例子:

      链接依赖

  • c++程序的编译和运行过程

    • 通过g++ 文件名1.cpp 必要的命令行参数对cpp源文件进行编译。(编译成功后会得到一个.exe可执行文件,但不会自动执行
    • 命令行直接输入exe文件名(包括后缀)运行exe可执行程序。
  • tasks.json与c_cpp_properties.json

    • c_cpp_properties.json文件中的includePath包含的路径将会成为编辑器内部intelliSense的关键,但与实际编译过程无关。(tip:ctrl+shift+P输入Edit configurations(UI)即可通过图形化界面选择选项自动配置生成c_cpp_properties.json文件的相关参数)

    c_cpp_properties_includePath

    • tasks.json文件中的args包含的参数将会在编译时作为命令行参数使用(即ctrl+f5)。

    tasks_args

    结论:若要引入外部库,需要同时配置**c_cpp_properties.json文件中的includePathtasks.json文件中的args**,从而实现无论是开发过程还是编译过程均不报错。

  • 解决方案

    1. 如果你安装了C/C++ Compile Run插件,该插件在Windows上可通过键入F6快速编译运行程序。其实它就是帮你实现了上述编译运行过程的两个步骤。但是命令行参数的灵活性自然也被舍弃了。。。

      所以果断舍弃这个插件吧! ̄□ ̄||

    2. 配置c_cpp_properties.json文件中的includePathtasks.json文件中的args,在includePath变量中添加你的外部include地址,在args变量中添加-I 外部include地址-L 外部lib地址参数。

    3. 编译默认库时是不需要带-I-L参数的,换言之,内部库的位置不需要额外指定,此时将外部库的文件手动移植到默认库的位置就可以达到引用外部库的效果了,此时仅在必要情况下配置-l参数。


下面解决一个实际问题————vscode导入EGE图形库。

  • 作为形式上的内部库

    • 下载相关依赖包

    • 将对应的includelib文件夹放入内部库的includelib文件夹

    • tasks.json文件中添加如下库依赖参数:

    库依赖参数

  • 完全作为外部依赖

  • 配置c_cpp_properties.json文件中的includePath,使其指向你的外部库的include位置
    • tasks.json文件中添加lib依赖路径
  • tasks.json文件中添加include依赖路径(文件位置仅供参考)

tasks_args

  • tasks.json文件中添加库依赖参数。

    库依赖参数

本文作者:Rekord
本文链接:https://sxrekord.com/Sol-ter-by-vsc-ref-to-cpp-el/
版权声明:本文采用 CC BY-NC-SA 3.0 CN 协议进行许可