WSL2 配置 C 语言开发环境

之前一直在Ubuntu下编写C/C++程序,体验十分良好,工具链一应俱全。然而,Linux下的办公和通讯软件少之又少,日常用起来的体验太差。WSL(Windows Subsystem Of Linux)一代虽然充满黑科技,但是看微软团队的意思,应该是技术难度过大,只好妥协一下,采用类虚拟机的方式来实现WSL2,技术上和虚拟机无差,也正好满足我的需求,常用软件的适配也十分积极,最近尝试了一下WSL2,内核轻量化,启动非常快,使用起来比虚拟机要方便。刚开始使用时按照以前Linux的使用经验去配置,出现了一些问题,网上搜到的一些文章要么莫名其妙,要么漏洞百出,踩了一些坑,浪费了很多时间才解决。这里记录下WSL2的配置以及后续配置C/C++环境的方法。 WSL2的安装和基本配置 安装 WSL2的安装方式有两种。 打开Win10的应用商店搜索Ubuntu关键字,根据个人喜好选择Ubuntu版本即可(其他发行版类似,下面的配置都默认发行版为Ubuntu20.04版本)。(推荐的方式) 去微软官网下载独立的软件包,然后在自己想要安装的位置点击安装即可,这时你安装的WSL2是在你安装它的位置,可以避免占用C盘空间,但是这样安装的话会存在一些问题,比如CLion无法检测到你系统内安装在C盘以外的WSL,而且VSCode连接WSL后的智能检测也会出问题,自动补全也会出错。所以不推荐这样安装。 配置软件源 WSL2的微软商店评论区中有人评论说:“不要更换官方的软件源,更新后会出问题”。我按照正常的方法去配置后没有发现问题,可能是微软官方已经修复了。这里软件源的配置和单系统的Ubuntu没有任何区别。 cd /etc/apt/ # 进入镜像文件所在的目录 ls sudo rm sources.list # 这里图方便直接选择删除镜像文件,也可以先备份一下,备份方法 sudo cp ./sources.list ./sources.list.backup sudo touch sources.list # 新建镜像文件 sudo nano sources.list # 选择自己习惯的镜像源,复制镜像然后粘贴并保存即可,我自己选用的是阿里的源 阿里的Ubuntu软件源(这里是ubuntu20.04版本的软件源,其他版本的自行搜索) deb http://mirrors.aliyun.com/ubuntu/ focal main restricted universe multiverse deb-src http://mirrors.aliyun.com/ubuntu/ focal main restricted universe multiverse deb http://mirrors.aliyun.com/ubuntu/ focal-security main restricted universe multiverse deb-src http://mirrors.aliyun.com/ubuntu/ focal-security main restricted universe multiverse deb http://mirrors....

November 20, 2020 · Huo Haodong

Java 和 C 语言实现回调的方式及区别

阅读本篇文章需要的前置知识 C语言函数指针的定义方式 指针的概念和基本用法 Java中接口的实现和定义 Java匿名类的使用 C语言实现回调 C语言中的回调指的是回调函数,即通过函数指针的方式将函数指针传递给调用者(某个函数),调用者在使用时就如同使用一个参数那样去调用函数。 下面的示例展示了函数指针的基本用法以及回调的实现 #include <stdio.h> // 自定义的函数,作为参数传入调用者的函数中 void my_callback_func() { printf("我是回调函数,以函数指针的形式传入别的函数中以供其他函数调用我\n"); } // 回调函数的调用者,通过参数中传递来的函数指针去调用回调函数 void invoker(void(*callback)(void)) { callback(); } int main() { // 函数指针的定义与用法 void (*callback)(void) = my_callback_func; callback(); // 传入函数指针实现回调 invoker(callback); return 0; } Java实现回调 C语言通过函数指针实现回调的方式十分便捷,然而Java中没有指针这一概念,更何谈指针函数。因此,想要在Java中实现回调只能另辟蹊径。 Java想要传入函数供其他对象的函数去调用,最容易想到的方法即把包含函数的对象本身作为字段定义在调用者的类中,使用时调用类内的该字段对应的方法即可。 下面是这种实现的一个示例 CallbackProvider类 package callback.example; // CallbackInvoker类,回调函数的提供者。 public class CallbackProvider { public void myCallbackMethod() { System....

November 18, 2020 · Huo Haodong