基于LLVM的C编译器--lcc——以CLion用SSH连接WSL Ubuntu22.04为例

2023-05-16

  • Windows 10 22H2
  • CLion 2022.3.1
  • Ubuntu 20.04 (Microsoft Store内的WSL发行版)

一、下载WSL,换源,切换到WSL2

1.1 保证windows版本

在设置->系统->关于中查看
在这里插入图片描述

  • 必须是win10及以上
  • 对于x64系统:版本1903或更高版本,以及内部版本18362或更高版本
  • 对于ARM64系统:2004或更高版本,内部版本19041或更高
  • 低于18362的内部版本不支持WSL2

1.2 开启必要设置

依次点击
控制面板–>程序–>程序和功能–>启用或关闭Windows功能

在这里插入图片描述
然后勾选
√ Hyper-V
√ 适用于Windows的Linux子系统
√ 虚拟机平台
(docker也是需要开启这些选项)
在这里插入图片描述
在这里插入图片描述


1.3 下载WSL Ubuntu22.04

直接在Microsoft Store搜索Ubuntu,下载这个版本即可。
在这里插入图片描述
然后可以在开始界面->最近添加里面找到,点开后,设置好用户名和密码,就可以使用Ubuntu命令行了。
在这里插入图片描述


1.4 操作文件

更推荐使用Linux命令行操作,但是如果想要界面化一点,windows文件管理器进去操作也未尝不可(不过可能会有权限不足的情况)
在这里插入图片描述


1.4 换国内源

注意下载什么版本的Ubuntu就要用对应的国内源,有的博文没有说自己是什么版本的,注意甄别。

正确的做法是:
在清华大学开源软件镜像站的Ubuntu镜像中选择自己的Ubuntu版本
在这里插入图片描述

1.4.1 命令替换(未亲测)

直接在命令行输入命令执行即可

1.4.2 手动替换

Ubuntu命令行中

cd ~
cd /etc/apt
sudo cp sources.list sources.list.bak	# 备份一下源文件
vim sources.list

进入编辑界面后,按下gg,会跳转到文本的开头。再按下dG会删光光标后的所有行的内容。这样所有内容都被清空了。

复制手动替换部分的内容,鼠标移动到命令行界面后右键点一下,就可以粘贴上去。(或者按i、a、o也可。)
然后按ESC,再按下:wq!就可以退出啦。

当然,你也可以尝试一下在windows文件管理器中,在 /etc/apt中找到sources.list,直接用记事本打开写入,虽然保存时可能会遇到权限错误。


1.5 更新镜像源列表sources.list

更新仓库和软件,使用apt或者apt-get都行

sudo apt update
sudo apt upgrade
sudo apt-get update
sudo apt-get upgrade

1.6 切换WSL2

wsl2的设计与wsl1有很大的不同。它包括一个真正的Linux内核,而不仅仅是一个兼容层。但是你wsl1和wsl2是互通的,

win+R打开cmdwsl -l -v会显示你的各wsl版本。
在这里插入图片描述
注意到VERSION列,我这里已经是2,你的如果是1,可以通过wsl --set-version <你的用的发行版> 2升级为wsl2,这需要几分钟的时间

wsl --set-version Ubuntu-22.04 2

如果要将WSL 2设置为默认体系结构,则可以使用以下命令

wsl --set-default-version 2


二、下载构建必须的库,下载基于LLVM的C编译器–lcc,进行构建

2.1 安装cmake、gcc、clang(以及可选的build-essentials软件包)

sudo apt-get install cmake gcc clang gdb build-essential

2.2 基于LLVM的C编译器–lcc编译步骤

2.2.1 安装llvm14。(注意,ubuntu22.04应该自带llvm14了,所以该语句不会再装一遍)
sudo apt-get -y install llvm-14

但是这样还不行,没有llvm-config等工具
在这里插入图片描述
所以再装一个llvm工具,项目的readme没有说这点

sudo apt-get -y install llvm

在这里插入图片描述

2.2.2 Clone仓库,进行构建

对readme的内容做了些修改:

git clone https://github.com/iiicp/lcc.git

# CMake进行构建
cd lcc
mkdir build
cd build 
cmake .. -DLLVM_DIR="Path to Your LLVM CMake dir"
# eg: cmake .. -DLLVM_DIR=/usr/lib/llvm-14/lib/cmake/llvm

在这里插入图片描述
注意如果你遇到像我这样的missing错误,需要再下载一个zlib库(参考:《Ubuntu20.04编译安装Opencv4.5.5安装包报错:Could NOT find ZLIB (missing: ZLIB_LIBRARY ZLIB_INCLUDE_DIR)》)。

sudo apt install zlib1g-dev

在这里插入图片描述
最后大功告成!

make
./lcc ../tests/c/stmt.c	# 使用lcc

在这里插入图片描述


三、CLion用SSH连接WSL

主要参考:《Windows 10 配置Clion+WSL2环境》的第二步-配置WSL(Ubuntu)
也参考了一点点《Clion使用:在windows下结合wsl进行linux开发》,但似乎没啥用。

然后要注意的是:

  • 如果项目建在windows本地(推荐),可以用WSL或者SSH连接过去。CL远程连接后的文件运行时会传输到WSL,会在/tmp中有个缓存。
  • 如果项目建在WSL中,可以用右键用CLion,然后选择WSL连接

四、番外:报错:头文件找不到,引不进来

你可以在CLion中尝试运行下面这个示例。

// HelloModule.cpp

#include "llvm/IR/Module.h"
#include "llvm/IR/LLVMContext.h"

using namespace llvm;

int main(int argc, char* argv[])
{
    LLVMContext context;
    Module* module = new Module("HelloModule", context);

    module->print(outs(), nullptr);

    return 0;
}

如果没问题那恭喜你可以正式开发了。

但是我一直都会报头文件找不到的问题,卡在这里很长时间,Win下VS的各种配置我都试了,Linux也尝试了makefile、CMake,依然没法,或许是我CMake不精的原因。而网上教程几乎没人说。

最后我直接把 基于LLVM的C编译器–lcc中的CMakeLists.txt拿过来用就OK了
也可以像我一样删除了部分冗余语句。

cmake_minimum_required(VERSION 3.10)
project(newlcc)	# 这里填你自己的项目名

# set compiler version
set(CMAKE_C_STANDARD 99)
set(CMAKE_CXX_STANDARD 20)

# find llvm lib
set(LLVM_DIR "" CACHE PATH "path to llvm cmake dir")
find_package(LLVM REQUIRED 14)	# 这里注意LLVM最低14
llvm_map_components_to_libnames(llvm_all ${LLVM_TARGETS_TO_BUILD} Passes ExecutionEngine MCJIT)

# compiler and set search include and link llvm lib
add_executable(${PROJECT_NAME} main.cpp)	# main.cpp换成你自己的运行文件
target_include_directories(${PROJECT_NAME}
        PRIVATE
        src
        ${LLVM_INCLUDE_DIRS})
target_link_libraries(${PROJECT_NAME} PUBLIC ${llvm_all})
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

基于LLVM的C编译器--lcc——以CLion用SSH连接WSL Ubuntu22.04为例 的相关文章

  • win10下关闭笔记本自带键盘以及解锁

    win10下关闭笔记本自带键盘 管理员运行cmd sc config i8042prt start 61 disabled 重启 解除自带键盘锁定 1 sc config i8042prt start 61 auto xff0c 重启 xf
  • chatra无法注册

    chatra用QQ邮箱注册显示邮箱无法访问 xff0c 不知道是不是邮箱设置了还是这个网站不支持 xff1b 用163邮箱注册就成功了
  • 打开回收站提示“回收站已损坏是否清空该驱动器上的回收站“解决方法

    我们一般需要删除的文件或者文件夹都是删除在电脑系统中的回收站中的 xff0c 但是最近有一个网友在打开Win10系统的回收站的时候 xff0c 忽然弹出了提示 D xff1a 上的回收站已损坏 是否清空该驱动上的回收站 xff0c 一般遇到
  • C++之迭代器(Iterator)篇

    迭代器 xff08 Iterator xff09 的介绍 背景 xff1a 指针可以用来遍历存储空间连续的数据结构 xff0c 但是对于存储空间费连续的 xff0c 就需要寻找一个行为类似指针的类 xff0c 来对非数组的数据结构进行遍历
  • Sublime Text运行C和C++程序

    Sublime Text 是一款当下非常流行的文本编辑器 xff0c 其功能强大 xff08 提供有众多的插件 xff09 界面简洁 还支持跨平台使用 xff08 包括 Mac OS X Linux 和 Windows xff09 在程序员
  • c++ string find(), rfind(), find_first_of(),find_last_of()

    find rfind 函数原型 xff1a span class token keyword int span span class token function find span span class token punctuation
  • 1233. 删除子文件夹

    难度 xff1a 中等 你是一位系统管理员 xff0c 手里有一份文件夹列表 folder xff0c 你的任务是要删除该列表中的所有 子文件夹 xff0c 并以 任意顺序 返回剩下的文件夹 如果文件夹 folder i 位于另一个文件夹
  • 【ROS入门篇·一】ROS文件系统 & catkin编译系统

    快速链接 xff1a ROS入门篇 ROS学习简介 一 ROS工作空间创建 amp 编译 1 xff09 创建工作空间 mkdir p catkin ws src cd catkin ws src 2 xff09 创建功能包 catkin
  • 【ROS入门篇·五】launch文件使用 & 向节点传递参数

    快速链接 xff1a ROS入门篇 ROS学习简介 一 launch文件使用 1 1 launch文件简介 launch文件能够同时启动一个ROS Master和多个Node launch文件的标签 lt launch gt lt 根标签
  • 【ROS小车仿真·一】rviz中显示urdf模型

    快速链接 xff1a ROS小车仿真 从零实现gezebo小车仿真 一 urdf简介 URDF Unified Robot Description Format 统一机器人描述格式 xff0c URDF是使用XML格式描述机器人的文件 参考
  • 2.为什么要内存对齐?

    一 什么是内存对齐 xff08 Memory alignment xff09 xff0c 也叫字节对齐 在计算机中 xff0c 内存是按 字节 byte 1byte 61 8bit 划分的 xff0c 而cpu在读取内存数据时 xff0c
  • 问题笔记:STM32串口数据位与校验位

    问题 xff1a STM32移植freemodbus 后测试时 xff0c 只能使用无校验 xff0c 设置奇偶校验时无法与上位机通讯解决方法 如果串口助手使用串口配置为 xff1a 数据位8 停止位1 有奇偶校验 STM32需设置为 xf
  • 虚拟机使用pc摄像头

    1 win 43 r打开运行 2 在运行中键入services msc回车 xff0c 打开服务 3 右边下拉找到VMware Authorization Service 4 双击打开属性 xff0c 启动类型 gt 自动 xff0c 点击
  • sudo: 无法执行 ./configure: 没有那个文件或目录

    先说下环境 xff0c centos7 xff0c 编译srt时遇到的 看看是否存在这个文件 xff0c 如果存在 ll 查看是否是可执行的 xff0c 如果不可执行 sudo chmod span class token operator
  • 【Unity】为什么要用栈?

    今天看到一个UI界面使用了栈 xff0c 养成了写的习惯 xff0c 但是没有明白后面的道理 xff0c 自己查了很多资料 xff0c 发现很多人都在说后进先出 xff0c 但是也没有比较好的例子和解释 xff0c 直到遇见了这样的一个说法
  • printf打印long long类型数据

    用微妙做单位的话 xff0c 时间戳是16位数字 xff0c 应该用64位整形存储 xff0c long long 如果用printf打印的话 xff0c d默认是int类型 xff0c 打印long long int格式是 lld 打印l
  • h264和h265编码所需要的处理器性能

    h265压缩比为1 200 xff0c h264压缩比为1 100 xff0c 压缩一帧h265理论上比压缩一帧h264多10ms的时间 以下数据均来自实测 在Intel Core i7 6700 CPU 64 3 40GHz 4核8线程中
  • webrtc(native C++) + srs 拉流客户端

    webrtc编译h264使用openh264 解码使用ffmpeg解码 对于vp8 vp9解码也是使用ffmpeg 其实openh264库可以支持解码功能 这点不同于x264 但webrtc选择的是ffmpeg 可能是为了统一吧 首先在编译
  • openssl生成server.crt和server.key

    你可以使用 openssl 命令行工具来生成自签名的 SSL 证书和密钥 以下是步骤 xff1a 打开终端 输入以下命令 xff0c 生成私钥 xff08 server key xff09 xff1a openssl genrsa span
  • srs one2one,one2many通话环境搭建

    一 简介 二 go环境配置 三 srs编译配置 四 信令服务器编译 4 1 signaling8 4 2 web服务器 五 测试 六 附录 官 档参考地址 xff1a https github com ossrs srs wiki v4 C

随机推荐

  • srs 直播连麦环境搭建

    一 简介 二 修改conf rtc conf 三 两个客户端加入房间 四 合流 4 1分别拉流尝试 4 2合流推流 4 3拉取合流 一 简介 直播连麦是指在one2one或one2many进行音视频通话 xff0c 此时把他们的音视频流合在
  • DM-VIO安装与运行各类数据集

    1 论文地址 xff1a https vision in tum de media research vslam dm vio dm vio pdf https vision in tum de media research vslam d
  • sklearn风格的keras接口KerasClassifier、KerasRegressor

    span class token keyword from span tensorflow span class token punctuation span keras span class token punctuation span
  • python与java通信——使用socket模块

    前几天遇到个问题需要用python和java通信 xff0c 网上这种帖子很多 xff0c 比如runtime方法 xff0c py4j方法等 但是runtime方法似乎只能向python传参 xff0c 不能接受python传回 xff1
  • 简单移动平均SMA和指数移动平均EMA

    一 简单移动平均SMA 最近有一个平滑的需求 xff1a 设置平滑期数h xff08 奇数 xff09 xff0c 每期点平滑方法是 xff1a 取该期前后共m期 xff08 含本期 xff09 点的平均值 如果前或后没有足够的点则不用平滑
  • postman基础教程

    目录 一 postman安装说明 1 下载与安装 2 界面导航说明 3 发送第一个请求 二 postman基础功能 1 常见类型的接口请求 1 1 查询参数的接口请求 1 2 表单类型的接口请求 1 3 上传文件的表单请求 1 4 json
  • pandas使用分位数筛选满足条件的行

    分位数计算原理参见 python pandas 分位数 下面直接使用pandas的quantile方法 1 给个例子 span class token keyword import span pandas span class token
  • pandas str.endswith筛选结尾字符串为一个范围内的行

    span class token keyword import span numpy span class token keyword as span np span class token keyword import span pand
  • 聚类集成方法python实现(基于相似度、基于重标记法)

    一 写此篇的背景 有个同学给我两篇论文 基于聚类集成的特征选择方法研究 李玥 基于基聚类器对齐的聚类集成方法研究 杨康 xff0c 基于相似度的方法跟他讲了一遍他自己复现好了 xff0c 但是他觉得他的数据集有几万条 xff0c 时间和空间
  • pandas 如何获得每类A的月末数据B

    一 描述问题 如何取到下面这个dataframe中 xff0c 每一类Code对应的月末数据 df span class token operator 61 span pd span class token punctuation span
  • pandas groupby分组后对每个组进行fillna填值

    一 初始数据如下 xff0c 希望分组后 xff0c 组间数据互不干扰的填充 span class token keyword import span pandas span class token keyword as span pd s
  • VS2022配置Games101作业环境

    一 首先配置opencv4 43 contrib 1 opencv源码下载 访问github上的opencv主页 首先点进第一个opencv 我这里默认就是4 x xff0c 点开可以知道分支为4 x 还需要点Tags 我这里使用的是4 5
  • Games101 VS2022 C++ auto推断不出变量类型

    在写Games101 Homework2的时候 xff0c 下面这句的 auto推断不出3个变量的类型 span class token comment If so use the following code to get the int
  • 密度聚类:OPTICS算法详解

    很多人不理解OPTICS算法绘出的图该怎么理解 为什么波谷就算一类 xff0c 有个波峰又算另一类了 xff0c 本篇在第三部分的第2 3节详细讲这个是什么判别分类的 本篇会添加一些个人思考过程 xff0c 可能有不严谨的地方 xff0c
  • 密度聚类:OPTICS算法简单易懂版

    前几天写了一篇详解版 xff0c 感觉可能太详细了阅读量不高 xff0c 所以修改精简成这篇 很多人不理解OPTICS算法绘出的图该怎么理解 为什么波谷就算一类 xff0c 有个波峰又算另一类了 xff0c 本篇在第三部分的第2 3节详细讲
  • 跟着LearnOpenGL文档做的纹理显示不出来,但也不报错

    跟着LearnOpenGL文档入门章的纹理一节 xff0c 把源代码复制下载都运行不了 xff0c 有这么3条要注意的点 一 下载完stb image h xff0c 引用时要加上 define STB IMAGE IMPLEMENTATI
  • 【C++】一文搞懂C++中的std::是什么

    1 C 43 43 中的std 是什么 xff1f std 是个名称空间标示符 xff0c C 43 43 标准库中的函数或者对象都是在命名空间std中定义的 xff0c 所以我们要使用标准函数库中的函数或对象都要使用std来限定 标准库在
  • 详解GMM高斯混合模型EM模型

    一般讲到GMM就会讲到EM 我不过多的介绍EM算法 这里只是举一些例子来看看真实的GMM怎么用EM算的 一 GMM的作用 记住GMM的作用 xff0c 就是聚类 xff01 二 GMM有hard和soft两种 hard GMM和soft G
  • MiniAlphaGo黑白棋 蒙特卡洛搜索

    做个笔记 一 蒙特卡洛在黑白棋的应用 输入 xff1a 棋盘 x1d44f x1d45c x1d44e x1d45f x1d451 当前执子方 x1d450 x1d45c x1d459 x1d45c x1d45f 搜索时间 x1d461 x
  • 基于LLVM的C编译器--lcc——以CLion用SSH连接WSL Ubuntu22.04为例

    Windows 10 22H2CLion 2022 3 1Ubuntu 20 04 xff08 Microsoft Store内的WSL发行版 xff09 一 下载WSL xff0c 换源 xff0c 切换到WSL2 1 1 保证windo