欢迎光临!
若无相欠,怎会相见

CLion 和 WSL2 打造 Linux C 语言阅读环境

序言

我自己一直对C语言充满敬畏感,但是我还是忍不住想去学习了解它,本篇文章就在 Windows 10 系统上,使用 CLion 和 WSL2 子系统打造 Linux C 语言代码的学习阅读环境。

注意 CLion 2019.3.6 支持的 cmake 为2.8.11-3.15.x , 支持的最新的为3.15.7, GDB版本为7.8.x-8.3.x, 支持的最新的为8.3.1。

WSL2安装

如果在 Windows 10 上启用 Linux 子系统,需要先开启子系统开关,其步骤如下图:

简言之就是先打开”控制面板”,然后选择”程序和功能”,再点击”启用或关闭 Windows 功能”,最后勾选 “适用于 Linux 的 Windows 子系统” 。

然后在 Windows 应用商店里面搜索 “Linux”, 或是其他名字,选择一个自己熟悉或者喜欢的版本,我选择安装的 Kali Linux,实际上不带有工具包的 Kali 与 Ubuntu 没什么区别,详细的安装步骤我就不写了,安装完毕后可以在 Windows Terminal 中启用:

WSL2 安装开发工具

在 Shell 中执行如下命令:

sudo apt-get update    # 更新软件源
sudo apt install vim    # 最好安装一个vim 
sudo apt-get install cmake gcc clang gdb build-essential # 这是CLion官方推荐的安装包

安装比较耗时,当然取决于网络情况。

WSL2 配置 SSH

直接执行下面的命令:

wget https://raw.githubusercontent.com/JetBrains/clion-wsl/master/ubuntu_setup_env.sh && bash ubuntu_setup_env.sh

当然,如果网络有问题,可以 copy 下面的代码,保存为 sh 脚本,然后再执行:

#!/bin/bash
set -e

SSHD_LISTEN_ADDRESS=127.0.0.1

SSHD_PORT=2222
SSHD_FILE=/etc/ssh/sshd_config
SUDOERS_FILE=/etc/sudoers
  
# 0. update package lists
sudo apt-get update

# 0.1. reinstall sshd (workaround for initial version of WSL)
sudo apt remove -y --purge openssh-server
sudo apt install -y openssh-server

# 0.2. install basic dependencies
sudo apt install -y cmake gcc clang gdb valgrind build-essential

# 1.1. configure sshd
sudo cp $SSHD_FILE ${SSHD_FILE}.`date '+%Y-%m-%d_%H-%M-%S'`.back
sudo sed -i '/^Port/ d' $SSHD_FILE
sudo sed -i '/^ListenAddress/ d' $SSHD_FILE
sudo sed -i '/^UsePrivilegeSeparation/ d' $SSHD_FILE
sudo sed -i '/^PasswordAuthentication/ d' $SSHD_FILE
echo "# configured by CLion"      | sudo tee -a $SSHD_FILE
echo "ListenAddress ${SSHD_LISTEN_ADDRESS}"	| sudo tee -a $SSHD_FILE
echo "Port ${SSHD_PORT}"          | sudo tee -a $SSHD_FILE
echo "UsePrivilegeSeparation no"  | sudo tee -a $SSHD_FILE
echo "PasswordAuthentication yes" | sudo tee -a $SSHD_FILE
# 1.2. apply new settings
sudo service ssh --full-restart
  
# 2. autostart: run sshd 
sed -i '/^sudo service ssh --full-restart/ d' ~/.bashrc
echo "%sudo ALL=(ALL) NOPASSWD: /usr/sbin/service ssh --full-restart" | sudo tee -a $SUDOERS_FILE
cat << 'EOF' >> ~/.bashrc
sshd_status=$(service ssh status)
if [[ $sshd_status = *"is not running"* ]]; then
  sudo service ssh --full-restart
fi
EOF
  

# summary: SSHD config info
echo 
echo "SSH server parameters ($SSHD_FILE):"
echo "ListenAddress ${SSHD_LISTEN_ADDRESS}"
echo "Port ${SSHD_PORT}"
echo "UsePrivilegeSeparation no"
echo "PasswordAuthentication yes"

CLion 配置

打开 CLion 的设置,设置认证信息:

添加完毕之后,会有工具链的检测信息,其中支持的版本信息就出现了,但是对我而言,目前是没有影响的。

如果确实介意的话,建议自己在WSL中下载相应的版本,并手动指定相应的路径。

然后将这个配置上移,设置为default

如果有需要,还可以修改 Terminal ,修改这里为 kali.exe 之后,编辑器下方的 Terminal 将会变成响应的 Shell。

设置完毕后,再次打开一个 Linux C 项目代码,就不会有大量的红色错误提示了。

当然我仅仅用它来阅读 C 程序代码,方便自己学习,因为我目前看的是网上流传已久的十大C开源代码中的 TinyHTTPd。

2021-04-18 更新

我在 WSL 中正常编译 TinyHTTPd 后,能正常运行,但是访问 Web 页面的时候就是无法显示,页面一片空白。

查看了 index.html 文件,发现需要执行 color.cgi perl 脚本:

<HTML>
<TITLE>Index</TITLE>
<BODY>
<P>Welcome to J. David's webserver.
<H1>CGI demo
<FORM ACTION="color.cgi" METHOD="POST">
Enter a color: <INPUT TYPE="text" NAME="color">
<INPUT TYPE="submit">
</FORM>
</BODY>
</HTML>

color.cgi 的源代码如下:

#!/usr/local/bin/perl -Tw

use strict;
use CGI;

my($cgi) = new CGI;

print $cgi->header;
my($color) = "blue";
$color = $cgi->param('color') if defined $cgi->param('color');

print $cgi->start_html(-title => uc($color),
                       -BGCOLOR => $color);

print $cgi->h1("This is $color");
print $cgi->end_html;

直接在 shell 中运行这个 perl 脚本,发现出现了如下错误:

┌──(home㉿Station)-[~/tinyhttpd-0.1.0/htdocs]
└─$ perl -Tw color.cgi
Can't locate CGI.pm in @INC (you may need to install the CGI module) (@INC contains: /etc/perl /usr/local/lib/x86_64-linux-gnu/perl/5.32.1 /usr/local/share/perl/5.32.1 /usr/lib/x86_64-linux-gnu/perl5/5.32 /usr/share/perl5 /usr/lib/x86_64-linux-gnu/perl-base /usr/lib/x86_64-linux-gnu/perl/5.32 /usr/share/perl/5.32 /usr/local/lib/site_perl) at color.cgi line 4.
BEGIN failed--compilation aborted at color.cgi line 4.

发现是 Perl 的 CGI 模块没有安装,那直接安装 CGI 模块。

执行 perl -e shell -MCPAN 进入 CPAN shell,然后执行 cpan[1]> install CGI 就可以安装 CGI 模块了,需要等待,耗时较久。

另外,需要将 index.html 文件权限降低,把可执行权限移除,再次运行 httpd 就可以正常显示 Web 页面了。

结语

这篇文章就到此结束,如果有什么问题,后面再更新。

如有错误,敬请指出,感谢指正!        — 2021-04-18   00:50:25

赞(1) 打赏
转载请注明:飘零博客 » CLion 和 WSL2 打造 Linux C 语言阅读环境
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

欢迎光临