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

本文详细介绍了如何在Windows10上安装和配置WSL2,包括下载Ubuntu22.04,切换到WSL2,更换国内源,以及安装和使用基于LLVM的C编译器lcc。此外,还提到了使用CLion通过SSH连接到WSL进行Linux开发的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  • 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})
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值