英文:
Why does CMake insist that the processor used is x86_64 when it is actually arm64?
问题
我正在使用CMake 3.25.1在M1 Mac(Monterey 12.4)上,并尝试检测苹果设备上使用的架构(以便根据需要利用M1加速有条件地编译我的程序)。问题是,使用这个CMakeLists.txt
文件时,CMake会告诉我它正在使用x86_64。发生了什么?
英文:
I am using CMake 3.25.1 on an M1 Mac (Monterey 12.4) and am trying to detect the architecture used on an apple machine (so that I can conditionally compile my program to take advantage of M1 acceleration if I can). The problem is that, with this CMakeLists.txt
:
cmake_minimum_required(VERSION 3.25.1)
project(test)
if(APPLE)
message("Apple detected...testing architecture...")
# on macOS "uname -m" returns the architecture (x86_64 or arm64)
execute_process(
COMMAND uname -m
RESULT_VARIABLE result
OUTPUT_VARIABLE OSX_NATIVE_ARCHITECTURE
OUTPUT_STRIP_TRAILING_WHITESPACE
)
message("${OSX_NATIVE_ARCHITECTURE}")
if(OSX_NATIVE_ARCHITECTURE STREQUAL "arm64")
message("M1/2 chip detected.")
endif()
endif()
CMake will tell me that it is using x86_64:
What is going on here?
答案1
得分: 2
以下是翻译好的部分:
根据评论发现问题在于提问者仍在使用Intel版本的Homebrew,需要安装ARM版本的Homebrew。切换到ARM版本,然后重新安装之前的软件包。
在Rosetta环境下运行的进程或在任何使用Rosetta的进程下运行的进程将从uname -m
报告x86_64
。
有关更多/相关信息,请参阅:
英文:
As found in the comments, the problem was that the asker was still using the Intel version of Homebrew and needed to install the ARM version of Homebrew. Switch to the ARM version and then reinstall the packages you had before.
A process run with Rosetta or run under any process running with Rosetta will report x86_64
from uname -m
.
For more / related info, see:
答案2
得分: 0
根据我上面的评论,问题是我有一个旧版本的Homebrew,其中安装了x86_64 CMake,使用Rosetta。重新安装Homebrew(但首先备份我的已安装包的.txt
文件),然后在新Homebrew中重新安装所有我的包解决了我的问题。
请注意,如果你遇到类似的情况,你可能需要更改一些在旧版本Homebrew中设置的路径(即将/usr/local/bin
更改为/opt/homebrew/bin
)。
英文:
Per my comment above, the problem was that I had an old homebrew that had x86_64 CMake installed with Rosetta. Reinstalling homebrew (but first making a backup .txt
of my installed packages) and then reinstalling all my packages within the new homebrew fixed my problem.
Note that, if you're in a similar situation, you may need to change some paths set during old homebrew (i.e. /usr/local/bin
to /opt/homebrew/bin
)
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论