这个问题我已经有一段时间了。我有一台带有 M2 芯片的 Macbook,想再次进行一些 C++ 编程(已经有一段时间了)。我已经使用这个网站https://www.cs.colby.edu/maxwell/courses/tutorials/maketutor/ 中的简单程序来制作一个简单的 C 程序及其 makefile(想从 c 开始)。 makefile 不起作用(第一个已经不起作用)。终端抛出的错误是:
Undefined symbols for architecture arm64:
"_myPrintHelloMake", referenced from:
_main in hellomake.o
ld: symbol(s) not found for architecture arm64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
make: *** [hellomake] Error 1
关键是在终端中从 makefile 运行命令可以正常工作。
另外,我自己做了另一个makefile(我以前的方式),试试看:
hellofunc.o: hellofunc.c hellomake.h
gcc -c hellofunc.c
hellomake.o: hellomake.c hellomake.h
gcc -c hellomake.c
hellomake: hellomake.o hellofunc.o hellomake.h
clang hellomake.o hellofunc.o -o hellomake
它得到同样的错误。
我的问题是,我做错了什么吗?我知道 Mac M1 过去曾出现过问题,但我应该安装不同的东西吗?
顺便说一句,我在这里没有经验,所以也许我没有很好地解释自己。随时询问更多细节。
问题来自您的
make
程序:您的路径中可能有一个为英特尔架构编译的旧版本。当此 make
工具调用 clang
(或 gcc
,它是已安装的 clang
编译器的别名)时,编译器会尝试为英特尔架构生成对象和/或可执行文件,以及安装在您的设备上的工具系统无法处理这个。
尝试升级您的
make
实用程序:使用 which make
识别正在使用的程序,并使用 file
命令检查它编译的架构。重命名这个程序并再次运行 which make
以查看是否有另一个工具可用于 amd64 架构。