ld:包含头文件时找不到架构x86_64的符号

问题描述

我正在编写以下代码以打印基础操作系统。它是不完整的,可能是错误的(对错误的建议是正确的,出于学习目的,不需要完整的信息。)

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没有实现。