【问题标题】:ld: symbol(s) not found for architecture x86_64 when including header fileld:包含头文件时,未找到架构 x86_64 的符号
【发布时间】:2020-12-19 21:09:06
【问题描述】:

我正在编写以下代码来打印底层操作系统。它不完整,可能是错误的(感谢错误的建议,不需要完整,因为它是为了学习目的)。

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)
                   

请放轻松,谢谢你的帮助!

【问题讨论】:

    标签: c precompiled-headers


    【解决方案1】:

    您必须将 platform.c 链接到 Try.c 尝试使用此命令:

    gcc try.c platform.c
    

    您只包含了声明,没有包含实现。这会导致编译成功,但链接会失败,因为platform 没有实现。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-11-18
      • 2020-06-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-12-09
      • 2018-02-20
      • 1970-01-01
      相关资源
      最近更新 更多