我刚刚开始使用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应用”编译和链接应用程序正确
你试过'make -stdlib = libstdC++ -lstdC++'吗? – artm
您使用gcc还是clang?从你的错误看来,你至少与叮当声联系在一起。如果在链接过程中包含-v标志,你会得到什么? – thurizas
这只是用“GCC”编译的“C”。我是否正确地认为make没有做任何特别的事情,它只是执行命令来建立事物。 “app.o”和“helper.o”的作品,但不是“应用程序”。我敢肯定“应用程序”只是一个简单的链接使用gcc:“gcc app.o helper.o -o app”。令人沮丧的是,“gcc app.o helper.o -o app”工作得很好。 – CobraEnergyDrink