VS 代码扩展 "Code Runner" 不包含 <math.h> on Ubuntu Linux

VS Code extension "Code Runner" does not include <math.h> on Ubuntu Linux

当尝试编译包含 sqrt 或 pow 等数学函数的 C 代码时,终端显示此错误:

这是代码:

#include <stdio.h>
#include <math.h>

void main()
{
int x1, y1, x2, y2, dx, dy;
float c;

printf("\nUpisite koordinate tacke A(x1 i y1): ");
scanf("%d%d", &x1, &y1);
printf("\nUpisite koordinate tacke B(x2 i y2): ");
scanf("%d%d", &x2, &y2);

dx = x2 - x1;
dy = y2 - y1;
c = sqrt((dx*dx) + (dy*dy));

printf("\nDve tace su udaljene %2.f", c);

return;
}

我的同学建议这是 linux 的错误,我应该在终端末尾添加 -lm,但我正在尝试在 VSCode.[=16= 中完成这项工作]

VS Code 不会自动查找您在程序中使用的 header 文件并 link / 包含它 .

您可以通过 VS Code runner 运行的命令看到这一点,即

 cd {folder where the program is }
g++ {program.cpp}  
./{execute the binary}

您可以在编译阶段看到没有额外的库被 linked 或 header 包含在内。你必须自己做。

即为你的节目

gcc z14.c -o z14 -lm

我还建议学习像 CMake 这样的构建自动化工具,这将使编译任务和 linking 变得非常流畅。

要解决此问题,您可以编辑 Code-runner: Executor Map 文件,并在 "c": "cd $dir && gcc $fileName -o $fileNameWithoutExt -lm && $dir$fileNameWithoutExt" 中添加“-lm”。

{
"workbench.colorTheme": "Default Dark+",
"code-runner.saveAllFilesBeforeRun": true,
"code-runner.saveFileBeforeRun": true,
"explorer.confirmDragAndDrop": false,
"code-runner.enableAppInsights": false,
"code-runner.showExecutionMessage": false,
"code-runner.clearPreviousOutput": true,
"code-runner.customCommand": "-lm",
"code-runner.defaultLanguage": "C",
"clangd.arguments": [
    "-lm"
],
"clangd.checkUpdates": true,
"workbench.editor.enablePreview": false,
"code-runner.runInTerminal": true,

"code-runner.executorMap": {
    "javascript": "node",
    "php": "C:\php\php.exe",
    "python": "python",
    "perl": "perl",
    "ruby": "C:\Ruby23-x64\bin\ruby.exe",
    "go": "go run",
    "html": "\"C:\Program Files (x86)\Google\Chrome\Application\chrome.exe\"",
    "java": "cd $dir && javac $fileName && java $fileNameWithoutExt",
    "c": "cd $dir && gcc $fileName -o $fileNameWithoutExt -lm && $dir$fileNameWithoutExt"
}

}