gpt4 book ai didi

c++ - 带有 ARM M1 的 Mac 上的 cmake 正在运行带有 x86_64 架构而不是 arm64 的链接器

转载 作者:行者123 更新时间:2023-12-05 01:23:45 25 4
gpt4 key购买 nike

我正在尝试编译 glfw来自带有 M1 arm64 处理器的 Mac 上的源代码,在运行链接器时,cmake 奇怪地试图链接 x86_64 架构的项目,而二进制文件是为 arm64 构建的。

我克隆项目,创建名为 cmake-build-debug 的构建文件夹,使用 Makefile 等在其中生成构建系统,如下所示:

git clone https://github.com/glfw/glfw.git
cd glfw
mkdir cmake-build-debug
cd cmake-build-debug
cmake -S .. -B . -DCMAKE_BUILD_TYPE=Debug -DCMAKE_HOST_SYSTEM_PROCESSOR=arm64 -DCMAKE_SYSTEM_PROCESSOR=arm64

这很好用。但现在我使用 makecmake --config Debug --build . 构建它,.o 二进制文件生成得非常好,但是出于某种原因,使用 x86_64 目标架构的 cmake 错误地调用了链接器脚本:

-- Could NOT find Doxygen (missing: DOXYGEN_EXECUTABLE) 
-- Including Cocoa support
-- Configuring done
-- Generating done
-- Build files have been written to: /Users/burkov/Documents/Projects/open-source/glfw/cmake-build-debug
[ 47%] Built target glfw
Scanning dependencies of target wave
[ 50%] Linking C executable wave.app/Contents/MacOS/wave
ld: warning: ignoring file CMakeFiles/wave.dir/wave.c.o, building for macOS-x86_64 but attempting to link with file built for unknown-arm64
ld: warning: ignoring file ../src/libglfw3.a, building for macOS-x86_64 but attempting to link with file built for macOS-arm64
Undefined symbols for architecture x86_64:
"_main", referenced from:
implicit entry/start for main executable
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
make[2]: *** [examples/wave.app/Contents/MacOS/wave] Error 1
make[1]: *** [examples/CMakeFiles/wave.dir/all] Error 2
make: *** [all] Error 2

我查看了 glfw/cmake-build-debug/examples/CMakeFiles/wave.dir/build.make 中失败的 Makefile,并看到了 cmake 崩溃的行:

cd /Users/me/Documents/Projects/open-source/glfw/cmake-build-debug/examples && $(CMAKE_COMMAND) -E cmake_link_script CMakeFiles/wave.dir/link.txt --verbose=$(VERBOSE)

我手动打开文件 glfw/cmake-build-debug/examples/CMakeFiles/wave.dir/link.txt 文件并在那里看到以下链接脚本代码:

/Library/Developer/CommandLineTools/usr/bin/cc -g -isysroot /Library/Developer/CommandLineTools/SDKs/MacOSX12.1.sdk -Wl,-search_paths_first -Wl,-headerpad_max_install_names  CMakeFiles/wave.dir/wave.c.o  -o wave.app/Contents/MacOS/wave  ../src/libglfw3.a -framework Cocoa -framework IOKit -framework CoreFoundation 

如果我从 shell 手动执行这一行,它会按预期成功构建我的 arm64 架构二进制文件。

但是当这个 link.txt 脚本通过 cmake -E cmake_link_script CMakeFiles/wave.dir/link.txt --verbose= 被 cmake 自动调用时$(VERBOSE),它显然失败了,试图为错误的 x86_64 架构构建二进制文件。

为什么会发生这种情况以及如何解决这个问题?

最佳答案

对于遇到同样问题的任何人,looks like充分支持 Apple Silicon 的第一个 cmake 版本是 3.19 .

我使用的是 3.17.5,因为我的略微过时的 CLion 版本不支持高于该版本的 cmake。

更新到 cmake 3.22.4 后问题消失了。

关于c++ - 带有 ARM M1 的 Mac 上的 cmake 正在运行带有 x86_64 架构而不是 arm64 的链接器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71886569/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com