[英]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
要求额外的警告。 你会很高兴得到他们
q2.c
是你唯一的源文件翻译单元
-lm
是你的数学库。 您正在使用log(3)及其文档中提到了这一点。
-o q2
告诉gcc
将可执行文件放入q2
(实际工作由gcc
调用的ld
链接器完成)
如何配置Visual Studio代码以使用该命令是您的事。 你可以否则在终端中输入上述命令。 然后,您可以在shell的终端中键入./q2
来运行q2
程序(并且可以在其上使用gdb
)。
请注意, gcc
正在启动其他程序(例如cc1
, as
, ld
)。 如果您想了解哪些,插入-v
后gcc
在上面的命令。
请务必阅读文档,您使用的每一个功能的(所以阅读的printf(3) , scanf函数(3) , 数(3)至少...)和每个程序的您正在使用(如的gcc
和Visual Studio中的代码 )。
一旦你会写程序大提出了一些翻译单元(如foo.c
, bar.c
, gee.c
),你可能需要使用一些构建自动化工具(因为每次编译所有的人gcc -Wall -Wextra -g foo.c bar.c gee.c -lm -o qqq
是可能的,但是不方便 )。 您可以学习使用GNU make (或ninja )。
阅读如何调试小程序 。 首先不要期望您的程序能够按预期工作。
顺便说一句,研究一些现有的 自由软件程序的源代码(但从少于十万行的简单项目开始,例如在github上 )。 这可以教给你很多有用的东西。
我不确定VSCode如何编译程序,但由于它使用GCC,因此可能需要在编译时通过向GCC提供参数-lm
来链接数学库libm
。
只是一个调整代码亚军的settings.json
下file
- > 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.