背景信息:linux
筆者第一次接觸C語言是在大一學校開設的C語言程序設計課上,使用教材是國內高校老師編著的。json
Windows 系統,IDE 是 Microsoft Visual C++ 6.0,簡稱 VC6.0,是微軟於1998年推出的一款 C++ 編譯器。vim
當時,沒學習過計算機科學導論,計算機組成原理,也不知道 Linux 爲什麼物。就這樣期末考了 80+windows
如今回爐重造!bash
Windows 系統下使用 WSL 和 VSCode 調試 C/C++ 代碼,這是折中方案。編輯器
WSL(Windows Subsystem for Linux)是一個在Windows 10上可以運行原生Linux二進制可執行文件(ELF格式)的兼容層。工具
它是由Microsoft與Canonical公司合做開發,其目標是使純正的Ubuntu 14.04 "Trusty Tahr"映像能下載和解壓到用戶的本地計算機,而且映像內的工具和實用工具能在此子系統上原生運行。學習
必備知識:ui
Linux下gcc 編譯C語言
1.建立一個.C文件spa
vi/vim hello.c
2.編譯 hello.c文件,生成可執行文件
gcc hello.c
3.執行文件,在默認狀況下產生的可執行程序名爲 a.out
./a.out
4.一般能夠經過 gcc 的「-o」選項來指定本身的可執行程序名稱。
gcc -o hi hello.c
生成可執行程序名爲 hi
./hi
5.使用gcc的「-c」標記來編譯支持庫代碼(對多個文件進行編譯)
gcc -c hello.c
輸出結果爲一個名爲 hello.o 的文件
Windows 10下安裝WSL官方教程:https://docs.microsoft.com/zh-cn/windows/wsl/install-win10
編輯器有兩種方案:
接下來在 VSCode 安裝必備插件:
注意:點擊 VSCode 左下角的 WSL:Ubuntu,選擇 Remote-WSL:Reopen Folder in WSL
使用 VSCode 編輯代碼 與遠程鏈接WSL:Ubuntu,在 Linux 下 gcc 編譯 和 gdb 調試
至於爲何,不在 VSCode 上一站式解決編輯、編譯、調試?
每次編譯都會生成同名文件文件,索性使用 gcc 命令行默認生成 a.out
坑1:VSCode 是用來編輯代碼,必定要保持在遠程鏈接狀態。
理清思路,不要在本地新建文件夾保存代碼,要徹底按照 Linux 操做習慣
$ mkdir chapter_03
確保 gcc 和 gdb 安裝成功
~$ whereis gcc gcc: /usr/bin/gcc~$ whereis gdb gdb: /usr/bin/gdb
下面是第一次使用 VSCode 中 C/C++ 編譯插件須要配置的文件,launch.json
"version": "0.2.0", "configurations": [ { "name": "(gdb) 啓動", "type": "cppdbg", "request": "launch", "program": "${workspaceFolder}/chapter_03/a.out", // 此處是坑2,由於忘記加 chapter_03 "args": [], "stopAtEntry": false, "cwd": "${workspaceFolder}", "environment": [], "externalConsole": false, "MIMode": "gdb", "setupCommands": [ { "description": "爲 gdb 啓用整齊打印", "text": "-enable-pretty-printing", "ignoreFailures": true } ] }, { "name": "gcc - 生成和調試活動文件", "type": "cppdbg", "request": "launch", "program": "${fileDirname}/${fileBasenameNoExtension}", "args": [], "stopAtEntry": false, "cwd": "${workspaceFolder}", "environment": [], "externalConsole": false, "MIMode": "gdb", "setupCommands": [ { "description": "爲 gdb 啓用整齊打印", "text": "-enable-pretty-printing", "ignoreFailures": true } ], "preLaunchTask": "gcc build active file", "miDebuggerPath": "/usr/bin/gdb" } ]
坑3,使用 VSCode 編輯,在終端 gcc 編譯,報錯
$ cd chapter_03 $ ls frist.c
$ gcc frist.c /usr/bin/ld: /usr/lib/gcc/x86_64-linux-gnu/9/../../../x86_64-linux-gnu/Scrt1.o: in function `_start': (.text+0x24): undefined reference to `main' collect2: error: ld returned 1 exit status
源文件以下:
#include<stdio.h> int main(void){ printf("test gcc..."); return 0; }
解決方案:
$ gcc -Wall -g -c frist.c $ gcc -Wall -g frist.o -o frist $ ./frist test gcc...
進一步學習 gcc 參數
gcc 是 GNU 的 c 編譯器,gcc 在執行編譯工做的時候,總共須要4步:
-g // 只是編譯器,在編譯的時候,產生調試信息。
-c // 只激活預處理,編譯,和彙編,也就是隻把程序作成obj文件
受此啓發:https://blog.csdn.net/Hyz8970/article/details/101627753