VS Code/Code-Runner編譯C語言遇到undefined reference to XXX的一種解決辦法

JavicxhloWong發表於2024-11-08

背景

用VS Code編譯一個C語言編寫的專案檔案,這個專案除main檔案外還有些被引用的C檔案,如果不做相關配置的話,執行會報錯:

即編譯時找不到被引用的這些檔案,從而報錯。

解決辦法

我是使用code-runner這個外掛跑的,所以這裡只寫關於用這種方式執行程式碼的解決辦法。

首先檢視.vscode/ 配置資料夾下是否有settings.json
如果有則看是否有配置物件叫做code-runner.executorMap(code-runner.executorMap用於配置不同程式語言的執行命令);
如果有則在其中新增一條設定:

"c": "cd $dir && g++ -o $fileNameWithoutExt *.c && $dir$fileNameWithoutExt"

這條命令的含義如下:

  • cd $dir: 切換到當前檔案所在的目錄。其中$dir是表示當前檔案所在的目錄路徑的變數
  • g++ -o $fileNameWithoutExt *.c:
    g++表示使用g++編譯器進行編譯。
    -o $fileNameWithoutExt表示指定輸出檔案的名稱為當前檔名。例如,如果當前檔案是main.c,則輸出檔名為main。
    *.c表示編譯當前目錄下所有的 C 原始檔。(這個是關鍵,之前會存在找不到引用的一個問題就是其他檔案沒有被編譯)
  • $dir$fileNameWithoutExt
    執行生成的可執行檔案。$dir表示檔案所在目錄,$fileNameWithoutExt是不包含副檔名的檔名。

配置儲存後,再執行則沒有未定義引用的報錯了。

如果沒有settings.json檔案或者code-runner.executorMap欄位,可以這樣:
在外掛欄裡,找到code-runner,點選齒輪,進入設定頁面:

找到這一段,點選

如果之前沒有settings.json檔案的話這時會生成,並自動新增code-runner.executorMap欄位,然後如上文所述新增命令即可。

參考

  • https://blog.csdn.net/weixin_43870522/article/details/105736474
  • https://blog.csdn.net/PegasiTIO/article/details/89225352

相關文章