序言
我自己一直对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 配置
添加完毕之后,会有工具链的检测信息,其中支持的版本信息就出现了,但是对我而言,目前是没有影响的。
如果确实介意的话,建议自己在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
最新评论
这个软件有bug的,客户端windows有些键不能用如逗号、句号
没有收到邮件通知
我的评论通知貌似坏掉了,定位一下问题
测试一下重新部署后的邮件功能
居然看到自己公司的MIB库,诚惶诚恐
那可能是RobotFramework-ride的版本问题。我装的1.7.4.2,有这个限制。我有空再尝试下旧版本吧,感谢回复。
你好!我在python2.7中安装RobotFramework-ride的时候提示wxPython的版本最高是2.18.12,用pip下载的wxPython版本是4.10,而且我在那个路径下没有找到2
真的太好了,太感谢了,在bilibili和CSDN上都找遍了,终于在你这里找到了