Lightly Logo
返回按钮
返回博客

如何在 Linux 环境下运行 C语言项目?

2022-07-30

TL;DR

  1. Linux 云端编辑器
  2. 使用 WSL 运行

先上最简单的方法:直接使用 Linux 系统的云端编辑器自动配置环境,然后编译。操作起来没有什么技术难度,最简单、最快捷的方法。

Linux 云端C语言编译器

以 Lightly C语言在线编译器为例,开始使用后直接新建一个 C 语言项目就可以开始在线写C语言代码。如果项目代码已经写好了,也可以直接从客户端上传导入。 Lightly C语言在线编译器创建C语言项目文件 进入编程界面后,可以在下方的【终端】栏中输入命令,分别输入 uname -a 及 clang --version 查看 C语言在线编译器 的系统及编译器信息。 查看C语言在线编译器的系统及编译器信息 编写完代码后,直接点击右上角的 运行 按钮就可以在线编译C语言项目了。 使用Lightly在线编译C语言项目 除了使用一键运行的方法外,你同样也可以通过终端命令行输入 clang main.c,在 C语言在线编译器中将项目导出为 a.out 文件。然后,再输入 ./a.out 在终端运行。注:.out 后缀的文件是 Linux 系统的可执行文件,与 Windows 系统下的 .exe 文件类似。 通过终端命令行在 C语言在线编译器中将项目导出为 a.out 文件

编译C语言程序显然是学习 C 语言时的一门必修课,但初学 C 语言编程的时候,其实并没有必要把大力气花在环境配置上,而是更专注于编写代码、算法等更重要的部分。 很多同学在学习编程的时候,容易落入所谓的专业性、技术正确甚至是逼格这样的思维陷阱里,在安装系统、配置环境、选择编辑器、安装编译器等步骤下了大量功夫,结果还没真正开始学编程就耗尽了心力,解锁了从入门到放弃的成就。 大家在学习编程的过程中其实可以不必耻于选择更简单、时效更大的入门方式,借助C语言在线编译器等已有的工具直接从最重要的语法、算法、实操项目开始下手,然后再慢慢从这段学习过程中,一点一点地学习其中的系统、软硬件知识,而不至于虎头蛇尾。

回到正题。

C 语言在计算机科学的各类编程语言中一直具有相当高的地位,虽然后起的 Python 在数据科学、机器学习等方面已逐渐占据雄风,但这丝毫不影响曾经写出 Windows、MacOS、Linux 等我们现在使用的计算机系统,甚至 Python 的主要实施方式也是由 C 语言编写的。 作为高级语言,编译C语言的过程基本上是这样的: C语言在线编译器编译C语言的过程 在前面介绍的 C语言在线编译器一键运行的方法中,这个编译过程并不会完全体现,看起来更像是“源代码 > 编译器 > 可执行文件”这样的过程。学会编程以后,编译流程自然是绕不开的知识点,但大家也会更容易明白程序与终端之间的交互,同时也更容易理解这几个流程之间的关系。

Windows Subsystem for Linux (WSL)

适用于 Linux 的 Windows 子系统(Windows Subsystem for Linux, WSL)可以让开发者在 GNU/Linux 环境下运行项目,而免去双系统、虚拟机等设置。在 WSL 下,你可以选择自己想要的 GNU/Linux 版本,然后借助 vim、emacs 等工具运行 JavascriptPythonC/C++RustGo 等不同的编程语言。WSL 也可以让用户类 Unix 命令行下启用 Windows 应用,同时在 Windows 系统下启动 GNU/Linux 应用。

什么是 GNU?

GNU 是一个自由的操作系统,其内容软件完全以 GPL 方式发布。这个操作系统是 GNU 计划的主要目标,名称来自 GNU's Not Unix! 的递归缩写,因为 GNU 的设计类似 Unix,但它不包含具著作权的 Unix 代码。—— 来源维基百科

WSL 的安装方式可以直接查看微软的官方安装文档:安装 WSL | Microsoft Docs

安装

  1. 安装好 WSL 后,安装 Visual Studio Code 并在应用商店下载 C/C++ 插件。
  2. 运行 WSL 并输入以下命令,安装 C 语言编译器。如果需要安装 C++ 编译器或调试工具,还可以将 gcc 替换为 g++(C++ 编译器)或 gdb(调试器)。
sudo apt-get update
sudo apt install gcc
sudo apt-get install build-essential gdb

创建项目文件

在 WSL 中创建项目文件夹 projects,然后再创建子文件夹 helloworld。除此之外,我们还需要再 Windows 下创建一个名为 helloworld 的文件夹。

mkdir projects
cd projects
mkdir helloworld

配置 VS Code

在 VS Code 中,同时按下 Ctrl+Shift+P 后输入 C/C++,并选择 Edit Configurations (UI)。之后,我们需要把 Compiler path 改为 /usr/bin/gcc 并把 IntelliSense mode 改为 gcc-x64。

{
 "configurations": [
 "configurations": [
     {
         "name": "Win32",
         "includePath": [
             "${workspaceFolder}/**"
         ],
         "defines": [
             "_DEBUG",
             "UNICODE",
             "_UNICODE"
         ],
         "compilerPath": "/usr/bin/gcc",
         "cStandard": "c11",
         "cppStandard": "c++17",
         "intelliSenseMode": "gcc-x64"
     }
 ],
 "version": 4
}

在 VS Code 转入 View > Command Palette > Configure Default Build Task > Create tasks.json file from template > Others,在弹出的 tasks.json 中粘贴下面的内容并把 替换为自己的 Linux 用户名。

{
 "version": "2.0.0",
 "version": "2.0.0",
 "windows": {
   "options": {
     "shell": {
       "executable": "bash.exe",
       "args": ["-c"]
     }
   }
 },
 "tasks": [
   {
     "label": "build on WSL",
     "type": "shell",
     "command": "g++",
     "args": [
       "-g",
       "-o",
       "/home/<linux user name>/projects/helloworld/helloworld.out",
       "'${relativeFileDirname}/${fileBasename}'"
     ],
     "group": {
       "kind": "build",
       "isDefault": true
     },
     "problemMatcher": [
         "$gcc"
     ]
   },
   {
     "label": "run on WSL",
     "type": "shell",
     "command": "/home/<linux user name>/projects/helloworld/helloworld.out",
     "group": {
         "kind": "build",
         "isDefault": true
     },
     "problemMatcher": [
         "$gcc"
     ]
     }
 ]
  }

Build on WSL 会编译项目并导出可执行的 helloworld.out 文件,而 run on WSL 则会运行已导出的可执行文件。 若要进行调试,大家可以在 json 中创建 launch.json 文件,然后复制粘贴下方的代码并替换

{
  "version": "0.2.0",
  "version": "0.2.0",
  "configurations": [
    
 {
   "name": "(gdb) Launch",
   "preLaunchTask": "build on WSL",
   "type": "cppdbg",
   "request": "launch",
   "program": "/home/<linux username>/projects/helloworld/helloworld.out",
   "args": [""],
   "stopAtEntry": true,
   "cwd": "/home/<linux username>/projects/helloworld/",
   "environment": [],
   "externalConsole": true,
   "windows": {
     "MIMode": "gdb",
     "miDebuggerPath": "/usr/bin/gdb",
     "setupCommands": [
       {
         "description": "Enable pretty-printing for gdb",
         "text": "-enable-pretty-printing",
         "ignoreFailures": true
       }
     ]
   },
   "pipeTransport": {
     "pipeCwd": "",
     "pipeProgram": "c:\\windows\\sysnative\\bash.exe",
     "pipeArgs": ["-c"],
     "debuggerPath": "/usr/bin/gdb"
   },
   "sourceFileMap": {
     "/mnt/c": "${env:systemdrive}/",
     "/usr": "C:\\Users\\<windows username>\\AppData\\Local\\Packages\\CanonicalGroupLimited.UbuntuonWindows_79rhkp1fndgsc\\LocalState\\rootfs\\usr\\"
   }
 }
  ]
}

添加源代码

在之前先建好的 helloworld 中先创建 helloworld.cpp 或 helloworld.c 文件,然后随意编写一个简单的代码并保存:

#include<stdio.h>
int main()
int main()
{
 printf("Hello world");
 return 0;
}