问题描述
我正在编写以下代码以打印基础操作系统。它是不完整的,可能是错误的(对错误的建议是正确的,出于学习目的,不需要完整的信息。)
platform.c
#include <stdio.h>
void platform(int a)
{
#if __APPLE__
printf("recognized apple\n");
#elif __LINUX__
printf("linux\n");
#else
printf("unkNown\n");
#endif
printf("%i\n",a);
}
如果我将main()
添加到 platform.c 并进行编译,则可以正常工作。但是,在我出于学习目的而进行实验时,包括一个头文件:
platform.h
#ifndef PLATFORM_H_ /* Include guard */
#define PLATFORM_H_
void platform(int);
#endif // PLATFORM_H_
和最后(在新文件中包含标头)
Try.c
#include "./platform.h"
int main()
{
platform(4);
}
我将其编译为:
gcc try.c
,我得到:
Undefined symbols for architecture x86_64:
"_platform",referenced from:
_main in lala-10eeb5.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command Failed with exit code 1 (use -v to see invocation)
请放心,谢谢您的帮助!
解决方法
您必须将platform.c链接到Try.c 尝试使用此命令:
gcc try.c platform.c
您仅包括声明,而不包括实现。这将导致编译成功,但是链接将失败,因为platform
没有实现。