1.前言

  在Windows下使用Linux常见的软件存在许多困难。选择之一是使用VMWare和VirtualBox之类的虚拟机软件,另一种选择是使用类UNIX模拟环境,如Cygwin,GNUWin32和MSYS2。

  GNUWin32软件比较少。Cygwin软件还算比较多,但是使用体验糟糕。MSYS2使用体验较好,软件数目中等。而本文将介绍的WSL(windows下的Linux子系统)则是另一种选择。

  由于WSL默认环境是Ubuntu,软件比较旧,所以建议通过alwsl脚本将其替换为ArchLinux环境。注意:WSL Arch Linux 已在 Microsoft Store 上可用,ArchLinux安装可以跳过以下步骤。

2.Alwsl安装ArchLinux环境

2.1准备工作

  * 先决条件:Windows10

  * 设置-->更新和安全-->针对开发人员-->启用“开发人员模式”

  

  * 控制面板-->程序和功能-->启用或关闭Windows功能-->勾选“适用于Linux的Windows子系统”-->确认后重启

  

2.2 安装ArchLinux

  * 获取alwsl脚本: git clone https://github.com/alwsl/alwsl

  * 执行alwsl脚本:

E:\alwsl>alwsl.bat install
alwsl (info): Cleaning old files.
alwsl (info): Installing base lxss fs from xenial server image. This will take A WHILE.
警告: lxrun.exe 仅用于配置适用于 Linux 的 Windows 子系统的旧分发版。
可以通过访问 Windows 应用商店来安装分发版:
https://aka.ms/wslstore 这将在 Windows 上安装由 Canonical 分发的 Ubuntu,其授权所遵循的条款请参见此链接:
https://aka.ms/uowterms 正在从 Windows 应用商店下载... %

  * 耐心等待安装完成。注:脚本中 lxrun /install /y 这一步下载速度较慢,可能需要一个小时。

   * 下载完成后开始安装。注:脚本中的waitforexit的会等待,可以删除 %HOMEPATH%\AppData\Local\lxss 目录下的 temp 目录。

   * 安装完成,输入Y确认。

正在从 Windows 应用商店下载... %
正在提取文件系统,这将需要几分钟的时间...
安装成功!
文档在以下网址提供: https://aka.ms/wsldocs
alwsl (info): Downloading alwsl rootfs (this might take a while)...
alwsl (info): Copying rootfs to temporary extraction destination.
alwsl (info): Unsquashing rootfs.
Parallel unsquashfs: Using processors
inodes ( blocks) to write [==============================================================================- ] / % created files
created directories
created symlinks
created devices
created fifos
alwsl (info): Transforming...
移动了  个目录。
移动了  个目录。
移动了  个目录。
alwsl (info): Checking installation success...
alwsl (info): Renaming shortcut.
alwsl (info): All done. Have fun
Do you want to start bash now? [Y,N]?

  * 确认后的界面。

Do you want to start bash now? [Y,N]?Y

------------------------------------------------------------------------------------------------------------------------
, _ _ _ | ___ ___ _______ ___
/#\ __ _ _ __ ___| |__ | (_)_ __ _ ___ __ | | Y | _ | |
/###\ / _` | '__/ __| '_ \| | | '_ \| | | \ \/ / | |. | | 1___|. |
/#####\ | (_| | | | (__| | | | | | | | | |_| |> < | |. / \ |____ |. |___
/##,-,##\ \__,_|_| \___|_| |_|_|_|_| |_|\__,_/_/\_\ | |: |: |: |
/##( )##\ | |::.|:. |::.. . |::.. . |
/#.-- --.#\ | '--- ---'-------'-------'
/` `\ A simple, elegant gnu/linux distribution. | edition (v0.) by turbo.
------------------------------------------------------------------------------------------------------------------------
root@computer:/mnt/e/alwsl#

  * 开始菜单ArchLinux快捷方式修改。右键->更多->打开文件位置。右键->属性->快捷方式->目标 内容修改为: %systemroot%\System32\bash.exe -c "cat /usr/share/issue && cd ~ && bash"

  * 然后就可以开始愉快的玩耍了。

2.3 设置环境和更新软件

  * 进入 %HOMEPATH%\AppData\Local\lxss\rootfs\etc

  * 修改pacman.conf:SigLevel改为Never,加入[archlinuxcn]。

#
# /etc/pacman.conf
#
# See the pacman.conf() manpage for option and repository directives
#
# WSL: Try not to fuck around in here. [options]
HoldPkg = pacman glibc
Architecture = auto
IgnorePkg = pacman fakeroot makepgk
Color
CheckSpace
SigLevel = Never
LocalFileSigLevel = Optional [core]
Include = /etc/pacman.d/mirrorlist [extra]
Include = /etc/pacman.d/mirrorlist #[community-testing]
#Include = /etc/pacman.d/mirrorlist [community]
Include = /etc/pacman.d/mirrorlist #[multilib]
#Include = /etc/pacman.d/mirrorlist [archlinuxcn]
Server = https://mirrors.tuna.tsinghua.edu.cn/archlinuxcn/$arch

  * 修改pacan.d/mirrorlist为:

Server = https://mirrors.tuna.tsinghua.edu.cn/archlinux/$repo/os/$arch
#Server = https://mirrors.kernel.org/archlinux/$repo/os/$arch
#Server = http://mirror.f4st.host/archlinux/$repo/os/$arch

  * 更新软件 pacman -Syyu 。

3.安装X Server,测试图形环境

  * 为了使用简单的图形界面,需要安装X Server软件,如VcXsrv、X-Win32、XMing、MobaXterm。有些不支持OpenGL,有些比较大,个人推荐安装XMing

  * XMing安装好后启动,会自动隐藏任务栏,如图所示:

  * 安装mesa-demos: pacman -S mesa-demos ,测试teapot:

注意:XMing 6.9不支持GLX1.3,还是用MobaXterm吧。

4.安装Root/Cling以及常见软件

  ROOT是欧洲核子研究中心CERN开发的基于C++,可与Fortran、Python等多种语言交互的数据处理软件。本文主要介绍root/cling作为C++的解释器和REPL来使用。

4.1安装Root/Cling

  * 输入 yaourt -S root ,一路点确定,需要编辑的地方一律跳过。在 ~/.bashrc 文件后面追加 export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/lib/root :

  * 安装完成后先启动Xming,再输入 root ,如图所示:

  * 在启动界面之后,进入交互环境:

root@computer:/mnt/c/Users/wurui# root
------------------------------------------------------------
| Welcome to ROOT 6.10/ http://root.cern.ch |
| (c) -, The ROOT Team |
| Built for linuxx8664gcc |
| From tag v6--, September |
| Try '.help', '.demo', '.license', '.credits', '.quit'/'.q' |
------------------------------------------------------------ root []

  * 输入官网Root Primer的例子,包括简单的绘图:

4.2安装SageMath和Spyder

  * 输入命令: pacman -S sagemath python-matplotlib spyder3

  * Sage测试:

  * Spyder3测试:

4.3安装Java和JVM语言

  * 输入: pacman -S kotlin scala groovy clojure java-openjfx intellij-idea-community-edition ,选择默认的 jdk8-openjdk 。完成后,在文件后追加: export PATH=$PATH:/usr/lib/jvm/java--openjdk/bin ,然后重新打开bash。

JVM语言测试:

  * 输入 idea.sh 启动IDEA,测试JavaFX的例子,将 /usr/lib/jvm/java--openjdk/jre/lib/ext/jfxrt.jar 加入工程依赖的库中:

  注:安装Eclipse后启动失败了,所以例子改成了IDEA。

5.Root/Cling作为C++解析器和REPL

5.1Root/Cling作为C++ REPL使用

  * Root是以为Cling基础的,预先加载了一些库,使用起来更加友好一些。Cling没有过多的预加载项,作为C++ REPL更纯粹一些。

  * Cling的例子,输入 .help 可以看到一些指令解释,其中: .files 表示列举加载的文件, .class 表示列举已经加载的类。

root@computer:~# cling

****************** CLING ******************
* Type C++ code and press enter to run it *
* Type .q to exit *
*******************************************
[cling]$ /*C Example*/
[cling]$ #include <stdio.h>
[cling]$ #include <string.h>
[cling]$ #include <stdlib.h>
[cling]$ char str[] = "hello"
(char []) "hello"
[cling]$ strlen(str)
(unsigned long)
[cling]$ puts(str)
hello
(int)
[cling]$ //C++ Example
[cling]$ #include <iostream>
[cling]$ #include <string>
[cling]$ #include <vector>
[cling]$ auto s = "hello"
(const char *) "hello"
[cling]$ #include <cstring>
[cling]$ using namespace std;
[cling]$ strlen(s)
(unsigned long)
[cling]$ string(s).size()
(unsigned long)
[cling]$ vector<string> ss{"hello","world"}
(std::vector<std::string> &) { "hello", "world" }
[cling]$ ss.size()
(unsigned long)

  * Root的例子,输入 root -l ,其中 -l 表示不显示logo。与Cling相比,Root更强大一点,有一定的语法高亮自动补全。这可能是由于Root已经预先加载了一些库,并且使用了 using namespace std; 。

5.2Root/Cling作为C++解析器,以脚本形式运行C++

  * 以SDL和OpenGL作为一个例子:

 // OpenGL headers
// #define GLEW_STATIC
#include <GL/glew.h>
#include <GL/glu.h>
#include <GL/gl.h> // SDL headers
#include <SDL2/SDL_main.h>
#include <SDL2/SDL.h>
#include <SDL2/SDL_opengl.h> #ifdef __TINYC__
typedef int bool;
#define false 0
#define true 1
#endif bool quit; SDL_Window* window;
SDL_GLContext glContext;
SDL_Event sdlEvent; int main(int argc, char *argv[])
{
quit = false; //Use OpenGL 3.1 core
SDL_GL_SetAttribute(SDL_GL_CONTEXT_MAJOR_VERSION, );
SDL_GL_SetAttribute(SDL_GL_CONTEXT_MINOR_VERSION, );
SDL_GL_SetAttribute(SDL_GL_CONTEXT_PROFILE_MASK, SDL_GL_CONTEXT_PROFILE_CORE); // Initialize video subsystem
if(SDL_Init(SDL_INIT_VIDEO) < )
{
// Display error message
printf("SDL could not initialize! SDL_Error: %s\n", SDL_GetError());
return false;
}
else
{
// Create window
window = SDL_CreateWindow("Hello World!", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, , , SDL_WINDOW_OPENGL | SDL_WINDOW_SHOWN );
if( window == NULL )
{
// Display error message
printf( "Window could not be created! SDL_Error: %s\n", SDL_GetError() );
return false;
}
else
{
// Create OpenGL context
glContext = SDL_GL_CreateContext(window); if( glContext == NULL )
{
// Display error message
printf( "OpenGL context could not be created! SDL Error: %s\n", SDL_GetError() );
return false;
}
else
{
// Initialize glew
glewInit();
}
}
} // Game loop
while (!quit)
{
while(SDL_PollEvent(&sdlEvent) != )
{
// Esc button is pressed
if(sdlEvent.type == SDL_QUIT)
{
quit = true;
}
} // Set background color as cornflower blue
glClearColor(0.39f, 0.58f, 0.93f, .f);
// Clear color buffer
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
// Update window with OpenGL rendering
SDL_GL_SwapWindow(window);
} //Destroy window
SDL_DestroyWindow(window);
window = NULL; //Quit SDL subsystems
SDL_Quit(); return ;
}

  * Root运行这个例子的命令行:

root -e '.L /usr/lib/libSDL2.so' -e '.L /usr/lib/libGL.so' -e '.L /usr/lib/libGLEW.so' -e 'int argc=0;char **argv=NULL' -e '.x main.c(argc,argv)' -q -l -b

  * Cling运行OpenGL会有问题,所以给了一个Qt的例子cling_qt.cpp:

 #include <QtCore/QtCore>
#include <iostream>
using namespace std;
void cling_qt()
{
QString s = "hello";
qDebug()<<s.size();
cout<<s.toStdString()<<endl;
}

  * Cling运行这个例子的命令行:

cling -I/usr/include/qt -lQt5Core -fPIC cling_qt.cpp

  注:所以的例子都可以在我的GitHub上找到。

5.3Root/Cling和Jupyter Notebook (Python)

  * 检查cling-jupyter是否安装好了:

[wurui@computer wurui]$ pacman -Qs cling-jupyter
local/cling-jupyter-git r4078.00a59858-
Interactive C++ interpreter built on the top of LLVM and Clang libraries.

  * 输入 jupyter-notebook 打开notebook,可以看到C++的选择。

  * 选择C++14,输入代码进行测试:

  * Root可以输入 root --notebook 开启notebook,或者从Python Jupyter Notebook中导入【注:可以参考官网的例子】。

6.结束语

  一直对C和C++的解释器比较感兴趣,C语言的解释器一直用的是TCC,C++的解释器偶有所闻,却未尝试。最近在Manjaro下成功运行了Root/Cling,觉得使用体验还算可以。

  可惜,Root/Cling在Windows没有可用的二进制版本。准确来说:Root5有一个Windows版本,比较旧了。Cling也可以用VS编译成功,还有Anaconda的版本,但是兼容性问题比较严重,基本不能用。

  此外,一直有听到WSL的消息,以前一直觉得WSL不成熟,所以并未尝试。最近,尝试在WSL下安装了Root/Cling,发现居然可以用。特整理成文,记录于此,作为一份备忘录。

WSL学习:安装ArchLinux和Root/Cling以及注意事项的更多相关文章

  1. 如何安装ArchLinux

    如何安装ArchLinux   本文基于ArchLinux(https://www.archlinux.org/)Current Release: 2013.08.01的ISO写的安装教程! ISO下 ...

  2. VirtualBox安装Archlinux并配置桌面环境

    最近无聊,就找来archlinux来玩一玩,去archlinux wiki上看了一下教程.以下是操作过程. 1. 下载镜像,下载地址; 2. 启动archlinux并选择Boot Arch Linux ...

  3. [ARCH] 1、virtualbox中安装archlinux+i3桌面,并做简单美化

    星期六, 28. 七月 2018 02:42上午 - beautifulzzzz 1.安装ArchLinux系统 安装Arch主要看其wiki,比较详细- 中文的我主要参考:一步步教你如何安装 Arc ...

  4. 安装archlinux的linux命令记录

    磁盘的分区:cfdisk 格式化分区:mkfs.ext4,mkswap,swapon 查看所有分区:lsblk /dev/sda 先挂载 / 分区:mount /dev/sda1 /mnt archl ...

  5. linux自学(九)之开始centos学习,安装数据库MariaDB

    上一篇:linux自学(八)之开始centos学习,安装tomcat 数据库我们不安装mysql,我网上看了好多资料发现mysql安装比较麻烦,我们这里安装同一个父亲的产品MariaDB.驱动,端口等 ...

  6. wsl 下安装docker

    docker for windows本身其实是可以直接用的,但是仍然有很多不足,比如说:权限问题.没有docker.sock文件.文件编码问题等.而win10自带的wsl可以非常完美地解决这些问题. ...

  7. Linux学习安装

    Linux学习安装 服务器指的是网络中能对其他机器提供某些服务的计算机系统,相对普通PC, 服务器指的是高性能计算机,稳定性.安全性要求更高 linux安装学习 1.虚拟机 一台硬件的机器 安装vmw ...

  8. 网络安装archlinux(2012.8.20)笔记

    周末闲极无聊,把烂笔记本翻出来想装个Archlinux,发现USB不能启动,光驱也挂了,只好网络安装. 我先后试了两种安装方式,一种纯互联网启动,安装,一种局域网启动,再互联网安装.分别说说. 不管哪 ...

  9. linux安装mysql后root无法登录 sql 无法登录

    linux安装mysql后root无法登录 问题:[root@localhost mysql]# mysql -u root -pEnter password: ERROR 1045 (28000): ...

随机推荐

  1. Base64及其Python实现

    1. 什么是Base64 Base64是一种基于64个可打印字符来表示二进制数据的表示方法 Base64是一种编码方式,提及编码方式,必然有其对应的字符集合.在Base64编码中,相互映射的两个集合是 ...

  2. VMWare workstation Pro 14 For Linux key

    VMWare workstation Pro 14 For Linux key: (我使用的Linux 系统是 Ubuntu16.04, 64位 ) 镜像是官方网址下载的,你也可以自己去官方网址下载: ...

  3. Centos7(Linux)下安装VMware12

    https://blog.csdn.net/u012605477/article/details/65627234

  4. Codeforces Round #462 (Div. 2) A Compatible Pair

    A. A Compatible Pair time limit per test1 second memory limit per test256 megabytes Problem Descript ...

  5. 动态规划:HDU1003-Max Sum(最大子序列和)

    Max Sum Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Su ...

  6. vrpie在Visio Studio 中无法调试的问题

    最近这这几天一直在研究vrpie,之前不能调试,一调试就出问题,打开那个生成的htm文件是没问题的,最初的解决方法是不通过调试来打可那个htm页面,但是这样比较麻烦,因为经常需要和服务器交互,就只能用 ...

  7. laravel5.2总结--门面(facades)

    Facades 为应用程序的服务容器中可用的类提供了一个「静态」接口.   Laravel 本身附带许多的 facades,甚至你可能在不知情的状况下已经在使用他们!   xpower的静态接口(门面 ...

  8. 数据结构之c++感悟

    #include<iostream.h> 头文件: #include<iostream.h> #define MAX 1024 typedef int Elemtype; ty ...

  9. PHP 命名空间和自动加载

    PHP 命名空间 php5.3 之后引入了命名空间的特性,从本质上讲,命名空间就是一个容器,你可以将类.函数和变量放在其中,在命名空间中,你可以无条件地访问这些项,在命名空间之外,必须导入或引用命名空 ...

  10. hnust 土豪金的加密解密

    问题 G: 土豪金的加密与解密 时间限制: 1 Sec  内存限制: 128 MB提交: 466  解决: 263[提交][状态][讨论版] 题目描述     有一位姓金的同学因为买了一部土豪金,从此 ...