Ubuntu20.04 VSCode 配置C++环境及GTK+配置【纯个人总结用】

背景

操作系统实验要求实现进程之间的通信,共享内存等要涉及到使用窗口程序的输入框的方法,可以使用Win32 API或者是POSIX API,由于Win32 API各种调用函数需要参入的参数特别多(查阅说是Win API很多参数是以前远古时代留下来的,有些可能没用了有些可能还有用,所以为了兼容,变的形式很丑),所以决定用POSIX标准来实现,这意味着需要在linux环境下进行开发,因此得在虚拟机里装的ubuntu配置c++的开发环境

至于开发环境本来想用devc++的但是好像ubuntu版本无法调试(该软件太老了),所以选择vscode

需要使用窗口程序,意味着要用c++实现GUI(图形界面),但属于新手一枚不知道哪个库好用,开始想用QT,查了之后大部分教程都是用的QT软件拖放控件来生成代码的,之后查看纯用代码使用QT,看起来非常的复杂,短期内没法快速上手,转战GTK+(Ubuntu的GUI好像也用的是GTK),目前看来实现相同功能使用GTK+的代码比QT少,可能容易上手一些。

另外,为了在虚拟机里打字方便,按照搜狗输入法官网linux版本的教程,配置花了1.5h,期间还改了更新源为alibaba提供的镜像,完成教程重启后结果无效。。。

废话不说,进入正文(对了写这篇的初心是防止虚拟机崩了时候能快速复现)

一、Ubuntu20.04环境下安装VSCode以及配置C++环境

对于配置环境,首先肯定先看看vscode官网的教程
Using C++ on Linux in VS Code

看了一大堆教程,感觉最简洁明了的教程是该博主的(虽然和官网教程有重叠):https://blog.csdn.net/weixin_45608532/article/details/122175582?utm_source=app&app_version=5.3.1&code=app_1562916241&uLinkId=usr1mkqgl919blen

  1. 一行代码就能安装vscode
 sudo snap install --classic code

在这里插入图片描述

安装后,根据个人习惯改了一下字体大小和风格。font-size改为16,风格为米色

  1. 安装gcc,g++,gdb全家桶

这也是官网里要求的前期准备

sudo apt-get update
sudo apt-get install gcc
sudo apt-get install g++
sudo apt-get install gdb

gdb好像是用于debug的?我看在后面配置debug文件时候提到了gdb的名字

  1. 安装vscode与c++有关的插件

安装C/C++及C/C++ extension与Code Runner

之后在相应的cpp文件点击右上角的三角运行符号或者直接在终端命令行编译执行即可。
另外,vscode会在当前的文件夹(相当于workspace,会悄悄咪咪地创建.vscode文件夹,这个文件夹里专门放三个json配置文件

  • c_cpp_properties.json
  • launch.json
  • tasks.json

这三个配置文件在下面会涉及到,这里先提一嘴(需要点一些按钮进行创建,具体点什么详情见上面提的官网文档,注意,点这些按钮的时候要先点击当前的cpp文件,把页面打开在这个cpp文件)

二、安装GTK+以及在vscode中的配置

主要参考:Ubuntu下GTK+的下载、安装
另外加个这个https://blog.csdn.net/qq_40904479/article/details/123707920

一行代码解决安装

sudo apt install libgtk-3-dev

在这里插入图片描述

1.下面就是跟着上面博客一步步进行了模仿,最后在vscode终端执行如下是可以编译运行文件的,这里从-phread开始的一长段是通过

pkg-config --cflags --libs gtk+-3.0

获得的

g++ gtk_test.c -o test5 -pthread -I/usr/include/gtk-3.0 -I/usr/include/at-spi2-atk/2.0 -I/usr/include/at-spi-2.0 -I/usr/include/dbus-1.0 -I/usr/lib/x86_64-linux-gnu/dbus-1.0/include -I/usr/include/gtk-3.0 -I/usr/include/gio-unix-2.0 -I/usr/include/cairo -I/usr/include/pango-1.0 -I/usr/include/fribidi -I/usr/include/harfbuzz -I/usr/include/atk-1.0 -I/usr/include/cairo -I/usr/include/pixman-1 -I/usr/include/uuid -I/usr/include/freetype2 -I/usr/include/libpng16 -I/usr/include/gdk-pixbuf-2.0 -I/usr/include/libmount -I/usr/include/blkid -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include -lgtk-3 -lgdk-3 -lpangocairo-1.0 -lpango-1.0 -lharfbuzz -latk-1.0 -lcairo-gobject -lcairo -lgdk_pixbuf-2.0 -lgio-2.0 -lgobject-2.0 -lglib-2.0

没学过cmake的用法所以没有跟着这个博主那样把这个长段指令放在一个专门编译用的文件里

2.于是想在vscode的配置文件里设置头文件的信息,头文件是来指出库文件所在的位置,编译的时候进行链接
vscode添加c++第三方库头文件的方法

把上面的长段指令放在properties文件里后,编译的时候报找不到<gtk/gtk+>头文件的错误,找了半天没有找到解决方法

3.找到了这个
VS Code 玩 C GTK 不报错能顺利编译运行的设置 tasks.json 等
这个倒是给了我一丝希望,配置三个文件后,操作后还是没啥用。
于是死心,虽然麻烦,就用终端加上编译指令的方法,后来看到编译指令可以不用加那么长段的指令,可以这样简单的写

g++ -o testGtk testGtk.c `pkg-config --cflags --libs gtk+-3.0`

但还是报错

4.似乎原因在于那个符号不是字符串符号,以及还有顺序问题?(没测试)
在这里插入图片描述

三、最终解决方案直接看这里

最后最后,还是觉得vscode的配置没配对

找到了一个看似可行的解决方法,似乎总结了前面绕的大圈(目前还没试)
https://www.it1352.com/2473193.html
在这里插入图片描述
附录:

"args": [
            "-g",
            "${file}",
            "-o",
            "${fileDirname}/${fileBasenameNoExtension}",
            "-pthread",
            "-I/usr/include/gtk-3.0",
            "-I/usr/include/at-spi2-atk/2.0",
            "-I/usr/include/at-spi-2.0",
            "-I/usr/include/dbus-1.0",
            "-I/usr/lib/x86_64-linux-gnu/dbus-1.0/include",
            "-I/usr/include/gtk-3.0",
            "-I/usr/include/gio-unix-2.0",
            "-I/usr/include/cairo",
            "-I/usr/include/pango-1.0",
            "-I/usr/include/fribidi",
            "-I/usr/include/harfbuzz",
            "-I/usr/include/atk-1.0",
            "-I/usr/include/cairo",
            "-I/usr/include/pixman-1",
            "-I/usr/include/uuid",
            "-I/usr/include/freetype2",
            "-I/usr/include/libpng16",
            "-I/usr/include/gdk-pixbuf-2.0",
            "-I/usr/include/libmount",
            "-I/usr/include/blkid",
            "-I/usr/include/glib-2.0",
            "-I/usr/lib/x86_64-linux-gnu/glib-2.0/include",
            "-lgtk-3",
            "-lgdk-3",
            "-lpangocairo-1.0",
            "-lpango-1.0",
            "-lharfbuzz",
            "-latk-1.0",
            "-lcairo-gobject",
            "-lcairo",
            "-lgdk_pixbuf-2.0",
            "-lgio-2.0",
            "-lgobject-2.0",
            "-lglib-2.0"
        ],
"includePath": [
            "${workspaceFolder}/**",
            "/usr/include/**",
            "/usr/lib/x86_64-linux-gnu/**"
        ]

2022/5/4 新增
今天尝试了一下命令

g++ gtk_test.cpp -o test2 `pkg-config --cflags --libs gtk+-3.0`
g++ -o test1 gtk_test.cpp `pkg-config --cflags --libs gtk+-3.0`

木有问题,都可以执行,说明上文提到没执行成功就是因为写成了字符串的标号问题
在这里插入图片描述

  • 9
    点赞
  • 32
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值