【问题标题】:how to solve this problem compiler error that linker command failed in VSCODE如何解决这个问题编译器错误,链接器命令在 VSCODE 中失败
【发布时间】:2020-04-02 02:39:15
【问题描述】:

我就这样在 VSCODE 上写了一些 C 代码。

代码在同一个项目文件夹中分为三个文件:头文件、函数文件和主文件。 但是当我开始编译时,文件无法编译并出错。像终端文本。

也许我认为这个错误是链接错误.. 如何解决这个问题..?

[源代码]

mysqrt.c

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

double mysqrt(double a, double b){
    double result = sqrt(pow(a,2)+pow(b,2));
    return result;
}

mysqrt.h

#include <stdio.h>
double mysqrt(double a, double b);

mysqrtTest.c

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

void main(void){
    double sum = mysqrt(3,4);
    printf("%.2f\n",sum);
}

[终端文本]

/Users/kim_donggyun/Desktop/My File/MyFile/VSCodeWorkFolder/2019_2_finalExam/mysqrtTest.c:5:1: warning: 
      return type of 'main' is not 'int' [-Wmain-return-type]
void main(void){
^
/Users/kim_donggyun/Desktop/My File/MyFile/VSCodeWorkFolder/2019_2_finalExam/mysqrtTest.c:5:1: note: change
      return type to 'int'
void main(void){
^~~~
int
1 warning generated.

Undefined symbols for architecture x86_64:
 "_mysqrt", referenced from:
    _main in mysqrtTest-45c3c1.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)

[操作系统]:macOS Mojave 10.14.6

【问题讨论】:

  • 不要使用代码图片 - 将代码作为文本包含在问题中。同样,不要使用错误消息的图片(尽管您似乎也在问题中包含了编译错误消息)。
  • 您好,欢迎来到stackoverflow,您最好将代码直接放入问题中,而不是放入图像。
  • 需要在同一命令行中编译mysqrtTest.cmysqrt.c
  • 代码和错误信息的图像对我们来说毫无用处。请参阅this Meta post 了解众多原因的列表。代码和错误是文本,可以直接复制/粘贴到您的帖子中。如果您花一些时间在tour 和阅读help center 页面以了解该网站的工作原理,然后再发布,您会发现您在这里的体验会好很多。
  • 需要在数学库中链接。

标签: c macos visual-studio-code compiler-errors


【解决方案1】:

要解决您的链接问题,您需要编译所有 c 文件,因为依赖项不会自动解析(头文件可以与代码文件分开命名,因此 .h 文件和 .c 文件是独立的)。

# assuming that gcc is your compiler
gcc -Wall -Wextra -Werror -pedantic -o mysqrtTest mysqrtTest.c mysqrt.c -lm

虽然我会建议你了解单独编译,并使用构建系统,如 make

Makefile 的示例

mysqrtTest: mysqrtTest.o mysqrt.o
    ${CC} -o $@ $^ -lm

然后使用make 构建您的二进制文件

【讨论】:

    猜你喜欢
    • 2015-11-28
    • 1970-01-01
    • 2017-09-25
    • 1970-01-01
    • 1970-01-01
    • 2015-03-08
    • 1970-01-01
    • 2013-04-21
    • 2020-02-29
    相关资源
    最近更新 更多