2015-08-18 133 views
-1

我刚刚开始使用C编程,并决定使用make构建我的示例应用程序。使用GCC命令编译文件可以正常工作,但是,使用make会失败并显示错误。如果使得只是在引擎盖下执行gcc命令,我不明白为什么这甚至是可能的。制作错误:体系结构x86_64的未定义符号:

以下是文件列表:

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"); 
} 

的问题:运行 “让应用” 引发错误消息

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(使用 命令进行串行执行)
  • 使用“使app.o”和“让helper.o”,然后运行“GCC app.o helper.o -o应用”编译和链接应用程序正确
+1

你试过'make -stdlib = libstdC++ -lstdC++'吗? – artm

+0

您使用gcc还是clang?从你的错误看来,你至少与叮当声联系在一起。如果在链接过程中包含-v标志,你会得到什么? – thurizas

+0

这只是用“GCC”编译的“C”。我是否正确地认为make没有做任何特别的事情,它只是执行命令来建立事物。 “app.o”和“helper.o”的作品,但不是“应用程序”。我敢肯定“应用程序”只是一个简单的链接使用gcc:“gcc app.o helper.o -o app”。令人沮丧的是,“gcc app.o helper.o -o app”工作得很好。 – CobraEnergyDrink

回答

1

重命名“makefile.make”到“ makefile“或”Makefile“。 “app.o”和“helper.o”似乎工作,但我认为这只是做它的默认说明。

+1

不知何故,崇高的文本魔术般地附加“.make”到我的生成文件 - 重命名,现在效果不错 – CobraEnergyDrink

+1

也可以提供'-f makefile.make'到'make' –

相关问题