生成错误:架构x86_64的未定义符号:

时间:2015-08-18 03:46:45

标签: c gcc makefile x86-64

我刚刚开始用C编程,并决定使用make来构建我的示例应用程序。使用GCC命令编译文件工作正常,但使用make失败并显示错误。如果 make 只是在幕后执行gcc命令,我不明白为什么这是可能的。

以下是文件列表:

makefile.make:

app.o: app.c helper.h
    gcc -c app.c

helper.o: helper.h helper.c
    gcc -c helper.c

app: app.o helper.o
    gcc app.o helper.o -o app

app.c

/*
 * file: app.c
 */
#include "helper.h"

int main() {
    do_something();
    return 0;
}

helper.h

/*
 * helper.h
 */
void do_something();

helper.c

/*
 * file: helper.c
 */
#include <stdio.h>
#include "helper.h"

void do_something() {
    printf("Test\n");
    printf("Testsss\n");
}

问题:运行“make app”会抛出错误消息

Undefined symbols for architecture x86_64:
  "_do_something", referenced from:
      _main in app.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
make: *** [app] Error 1

我试过的东西有效:

  • 使用gcc手动编译和链接(使用来自的命令 连续执行)
  • 使用“make app.o”和“make helper.o”然后运行“gcc app.o helper.o -o app”编译并正确链接应用程序

1 个答案:

答案 0 :(得分:1)

将“makefile.make”重命名为“makefile”或“Makefile”。 “app.o”和“helper.o”似乎有效,但我认为这只是做了默认指示。