Mac M2 makefile不起作用,但gcc/clang中的命令起作用

ryoqjall  于 2023-04-29  发布在  Mac
关注(0)|答案(1)|浏览(212)

我有这个问题已经有一段时间了。我有一台带有M2芯片的Macbook,想再做一些C++编程(已经有一段时间了)。我用这个网站https://www.cs.colby.edu/maxwell/courses/tutorials/maketutor/的简单程序来制作一个简单的C程序和它的makefile(想用C启动)。makefile不工作(第一个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在过去有过问题,但我应该安装不同的东西吗?
顺便说一句,我在这里没有经验,所以也许我没有很好地解释自己。你可以问更多的细节。

1szpjjfi

1szpjjfi1#

问题来自你的make程序:你可能有一个较旧的版本在你的路径编译英特尔架构。当此make工具调用clang(或gcc,它是已安装的clang编译器的别名)时,编译器会尝试为intel架构生成对象和/或可执行文件,而您系统上安装的工具无法处理此问题。
尝试升级make实用程序:使用which make来识别使用的是哪个程序,并使用file命令来检查它是针对什么体系结构编译的。重命名此程序并再次运行which make,以查看是否有其他工具可用于amd 64架构。

相关问题