在MacBook AIR M2上运行一个程序。程序之前默认是用gcc-9编译,用brew安装gcc-9提示“The x86_64 architecture is required for this software”。所以现在安装是gcc-12,但是程序编译时提示”Undefined symbols for architecture arm64“。图一是Makefile图二是具体错误提示图三是gcc版本信息网上有方法说可以在CFLAGS后面加上命令 -target arm64-apple-darwin22.1.0。但是运行后会提示”gcc-12: error: unrecognized command-line option '-target'“
补充:我发现macOS在 目录/usr/bin/下自带了gcc编译器,而brew安装的gcc在目录/opt/homebrew/bin/下。Mac自带的gcc同时支持x86和arm64,而brew安装的gcc只支持arm64,如图4所示。
然后,用Mac自带的gcc进行编译,又会出现图5错误。
出现undefined symbols for architecture arm64的原因是您正在使用的编译器无法找到与定义的符号相对应的实际代码。要解决该问题,您需要检查您的链接器设置,确保您的库中包含这些符号。您还可以尝试使用不同的编译器或使用gcc的-v (verbose)选项来获得更多信息。追问
我刚接触编程不久,有很多东西我都不太了解,可以更具体说明如何检查连接器设置吗?此外,我尝试了使用gcc-12、g++-12都是同样的错误。图片是gcc -v的信息。
温馨提示:答案为网友推荐,仅供参考
第1个回答 2023-02-02
编译C程序时,通常错误“架构arm64未定义的符号”表明,编译器无法找到某些符号的定义,通常函数或变量的名字。为了解决这个问题,有必要告诉链接器在寻找中引用的外部符号代码通过使用gcc -lxxx参数。此外,重要的是要确保C代码用C编译前端,而不是一个C的前端。追问
可以举个例说明gcc -lxxx参数如何设置吗
本回答被提问者采纳