繁体   English   中英

在VSCode中使用gcc编译C程序时出错

[英]Error while compiling C program with gcc in VSCode

我想在VS Code中编译以下代码,但是我正在使用“代码运行器”来获取此错误。 我到处都在抬头,但这并不能解决我的问题。

我想要实现此T(n) = 2T(n/2) + nlog(n)

第2版

// b. T(n) = 2T(n/2) + nlog(n)

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

int func(double n)
{
    return (2*func(n/2) + n*(log(n)));

}

int main()
{
    double n, result;
    printf("Enter the value of 'n' \n");
    scanf("%lf",&n);
    printf("Hey");
    result = func(n);
    printf("%lf \n",result);
    printf("Hey");

    return 0;

}

安慰:

user@user-H310M-DS2:~/Desktop/C programming/Assignments$ cd "/home/user/Desktop/C programming/Assignments/" && gcc q2.c -o q2 && "/home/user/Desktop/C programming/Assignments/"q2
/tmp/ccnNXN3L.o: In function `func':
q2.c:(.text+0x3a): undefined reference to `log'
collect2: error: ld returned 1 exit status

Visual Studio代码无关,与你的问题,你是不是用它进行编译。 因为它是一个IDE (或源代码编辑器),而不是一个编译器。 我猜您在某些Linux或POSIX系统上使用它。 顺便说一句,我首选的源代码编辑器是GNU emacs 所以,你的IDE运行一些编译命令(你需要了解哪些以及这些命令在做)。 你可以在终端运行这些命令(这​​实际上可能比较简单)。

如控制台日志所示,您正在使用GCC进行编译。 一些gcc命令已经启动(可能是Visual Studio代码)。

仔细阅读有关调用GCC的信息 论据顺序很重要!

你应该编译代码

gcc -Wall -Wextra -g q2.c -lm -o q2

让我解释一下:

  • gcc是您的编译器前端(实际的编译器cc1但您从未直接使用它;您要求gcc运行它)

  • -Wall要求几乎所有警告

  • -Wextra要求额外的警告。 你会很高兴得到他们

  • -g要求在调试信息 你真的希望能够使用gdb调试器gdb实际需要调试信息。

  • q2.c是你唯一的源文件翻译单元

  • -lm是你的数学库。 您正在使用log(3)及其文档中提到了这一点。

  • -o q2告诉gcc将可执行文件放入q2 (实际工作由gcc调用的ld链接器完成)

如何配置Visual Studio代码以使用该命令是您的事。 你可以否则在终端中输入上述命令。 然后,您可以在shell的终端中键入./q2来运行q2程序(并且可以在其上使用gdb )。

请注意, gcc正在启动其他程序(例如cc1asld )。 如果您想了解哪些,插入-vgcc在上面的命令。

请务必阅读文档,您使用的每一个功能的(所以阅读的printf(3) , scanf函数(3) , 数(3)至少...)和每个程序的您正在使用(如gccVisual Studio中的代码 )。

一旦你会写程序大提出了一些翻译单元(如foo.cbar.cgee.c ),你可能需要使用一些构建自动化工具(因为每次编译所有的人gcc -Wall -Wextra -g foo.c bar.c gee.c -lm -o qqq是可能的,但是不方便 )。 您可以学习使用GNU make (或ninja )。

阅读如何调试小程序 首先不要期望您的程序能够按预期工作。

顺便说一句,研究一些现有的 自由软件程序的源代码(但从少于十万行的简单项目开始,例如在github上 )。 这可以教给你很多有用的东西。

我不确定VSCode如何编译程序,但由于它使用GCC,因此可能需要在编译时通过向GCC提供参数-lm来链接数学库libm

只是一个调整代码亚军的settings.jsonfile - > preferences - > settings VS代码:

我添加了以下行

"code-runner.executorMap": 
    {
        "c": "cd $dir && gcc -Wall -Wextra -g  $fileName -lm -o $fileNameWithoutExt && $dir$fileNameWithoutExt",
    }

现在正在工作。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM