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

2023-12-03

我正在尝试编译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

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

-- 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

我查看了失败的 Makefileglfw/cmake-build-debug/examples/CMakeFiles/wave.dir/build.make并查看 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 via cmake -E cmake_link_script CMakeFiles/wave.dir/link.txt --verbose=$(VERBOSE),显然,尝试为错误的 x86_64 架构构建二进制文件失败了。

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


对于遇到同样问题的人来说,好像第一个版本cmake对 Apple Silicon 的充分支持是3.19.

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

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

带有 ARM M1 的 Mac 上的 cmake 正在运行 x86_64 架构而不是 arm64 的链接器 的相关文章

  • VB.NET 相当于 C# 属性简写吗?

    是否有与 C 等效的 VB NET public string FirstName get set 我知道你能做到 Public Property name As String Get Return name ToString End Ge
  • std::cout 和 std::wcout 有什么区别?

    在c 中 有什么区别std cout and std wcout 它们都控制流缓冲区的输出或将内容打印到控制台 或者它们只是相似吗 它们作用于不同的字符类型 std cout uses char作为字符类型 std wcout uses w
  • C++ 中本地类中的静态成员变量?

    我知道我们不能宣布static本地类中的成员变量 但其原因尚不清楚 那么请问有人可以解释一下吗 另外 为什么我们不能访问非static函数内部定义的变量 内部已经定义了局部类 直接在局部类成员函数中 在下面给出的代码中 int main i
  • 推导指南中的引用和值之间的差异

    考虑类型A template
  • 如何将 #ifdef DEBUG 添加到 Xcode?

    我的项目中有一些代码永远不应该在发布版本中使用 但在测试时很有用 我想做这样的事情 ifdef DEBUG Run my debugging only code endif 在 Xcode 4 中哪里添加 DEBUG 设置 我尝试将其放入
  • 如何修复此错误“GDI+ 中发生一般错误”?

    从默认名称打开图像并以默认名称保存 覆盖它 我需要从 Image Default jpg 制作图形 将其放在 picturebox1 image 上并在 picurebox1 上绘制一些图形 它有效 这不是我的问题 但我无法保存 pictu
  • 在新的浏览器进程中打开 URL

    我需要在新的浏览器进程中打开 URL 当浏览器进程退出时我需要收到通知 我当前使用的代码如下 Process browser new Process browser EnableRaisingEvents true browser Star
  • 将 System.Windows.Input.KeyEventArgs 键转换为 char

    我需要将事件参数作为char 但是当我尝试转换 Key 枚举时 我得到的字母和符号与传入的字母和符号完全不同 如何正确地将密钥转换为字符 这是我尝试过的 ObserveKeyStroke this new ObervableKeyStrok
  • 存储来自其他程序的事件

    我想将其他应用程序的事件存储在我自己的应用程序中 事件示例 打开 最小化 Word 或打开文件时 这样的事可能吗 运行程序 http msdn microsoft com en us library ms813609 aspx and 打开
  • 关于在 Windows 上使用 WiFi Direct Api?

    我目前正在开发一个应用程序 我需要在其中创建链接 阅读 无线网络连接 在桌面应用程序 在 Windows 10 上 和平板电脑 Android 但无关紧要 之间 工作流程 按钮 gt 如果需要提升权限 gt 创建类似托管网络的 WiFi 网
  • C++:.bmp 到文件中的字节数组

    是的 我已经解决了与此相关的其他问题 但我发现它们没有太大帮助 他们提供了一些帮助 但我仍然有点困惑 所以这是我需要做的 我们有一个 132x65 的屏幕 我有一个 132x65 的 bmp 我想遍历 bmp 并将其分成小的 1x8 列以获
  • 如何在 Blackberry Cascades 中显示具有特定号码的电话板

    我正在使用带有 C QT 和 QML 的 Blackberry Cascades 10 Beta 3 SDK 以及 Blackberry 10 Dev Alpha Simulator 和 QNX Momentics IDE 并且我正在尝试实
  • 使用 Moq 使用内部构造函数模拟类型

    我正在尝试模拟 Microsoft Sync Framework 中的一个类 它只有一个内部构造函数 当我尝试以下操作时 var fullEnumerationContextMock new Mock
  • 如何编写一个同时需要请求和响应Dtos的ServiceStack插件

    我需要提供本地化数据服务 所有本地化的响应 Dto 都共享相同的属性 IE 我定义了一个接口 ILocalizedDto 来标记那些 Dto 在请求端 有一个ILocalizedRequest对于需要本地化的请求 Using IPlugin
  • (de)从 CSV 序列化为对象(或者最好是类型对象的列表)

    我是一名 C 程序员 试图学习 C 似乎有一些内置的对象序列化 但我在这里有点不知所措 我被要求将测试数据从 CSV 文件加载到对象集合中 CSV 比 xml 更受青睐 因为它更简单且更易于人类阅读 我们正在创建测试数据来运行单元测试 该集
  • 错误:Redis 连接到 127.0.0.1:6379 失败 - 连接 ECONNREFUSED 127.0.0.1:6379

    我试图允许我的nodeJs docker 映像与我的redis docker 映像 Mac OS X 环境 之间进行通信 NodeJs Dockerfile FROM node 4 7 0 slim EXPOSE 8100 COPY nod
  • 英特尔 Pin 与 C++14

    问题 我有一些关于在 C 14 或其他 C 版本中使用英特尔 Pin 的问题 使用较新版本从较旧的 C 编译代码很少会出现任何问题 但由于 Intel Pin 是操作指令级别的 如果我使用 C 11 或 C 14 编译它 是否会出现任何不良
  • Linq-to-entities,在一个查询中获取结果+行数

    我已经看到了有关此事的多个问题 但它们已经有 2 年 或更长 的历史了 所以我想知道这方面是否有任何变化 基本思想是填充网格视图并创建自定义分页 所以 我还需要结果和行数 在 SQL 中 这将类似于 SELECT COUNT id Id N
  • 桌面上的 AVAudioSession?

    在 mac 桌面上 我试图录制系统声音 以及可选的麦克风声音 但一开始我只是录制系统声音 我正在遵循本指南 https www appcoda com ios avfoundation framework tutorial https ww
  • 在客户端系统中安装后桌面应用程序无法打开

    我目前正在使用 Visual Studio 2017 和 4 6 1 net 框架 我为桌面应用程序创建了安装文件 安装程序在我的系统中完美安装并运行 问题是安装程序在其他计算机上成功安装 但应用程序无法打开 edit 在客户端系统中下载了

随机推荐

  • durandal 优化器在 Visual Studio 中将其构建为构建后过程时引用了错误的路径

    我在 Visual Studio 中设置了一个构建后事件 以使用 durandal 的优化器 使用 Nodejs 来构建用于生产的 main built js 文件 收到错误消息说找不到 main built js 我相信这是因为它没有正确
  • 使用 ELMAH 配置自定义授权

    如何在没有默认 ASP NET 授权角色管理器的情况下将 ELMAH 配置为仅向某些人员显示 我 以及我认为的许多其他人 使用自己的授权逻辑并从零开始构建我的项目 而不使用提供的模板 我想记录错误 但似乎不可能配置 ELMAH 以某种方式覆
  • YouTube 嵌入上的播放按钮在 android-chrome 上不起作用

    我一直在页面上制作嵌入的 YouTube 视频 在桌面浏览器上运行良好 但是 在 android chrome 上 当您触摸中心的红色播放按钮时 嵌入的视频将不会播放 当你触摸播放按钮外面时 它确实可以正常播放 这很奇怪 我的客户也在 iP
  • 在 Mapbox 中使用 Leafletjs MarkerClusterGroup 和过滤器时出现问题

    我尝试过 Mapbox 及其 API 来创建交互式地图 目的是获取 geojson 文件中的点 并将其显示在地图上 它们必须通过标记图标进行过滤 并根据所应用的缩放进行分组 我在使用 MarkerClusterGroup 插件与 leafl
  • JavaScript 沙箱:隐藏给定范围内的全局变量

    我想创建一个 HTML JS 环境 用户可以在其中输入并运行任意 JavaScript 代码 这些代码将在给定监狱对象的上下文中执行 我已经设置了一个游乐场来说明我到目前为止所拥有的 这个做得相当不错 Basic evaluation wo
  • ASP / 获取行和计数

    为了增强性能和资源 我刚刚开始在一些脚本上使用 getRows 我刚刚遇到一个问题 想请教一下 我这样做是为了获取记录集并获取计数 If NOT rs EOF Then arrResultSet rs GetRows arrRowCount
  • java文本字段中的数据可以在没有数据库交互的情况下发送到jasper报表吗?

    我们正在使用 netbeans 用 java 开发一个桌面应用程序 我们已经安装了 Netbeans 的 jasper 报告 并且能够根据数据库中的数据设计报告 有一个表格 我们想要打印而不将数据存储在数据库中 我们可以将表单数据发送到ja
  • 如何使用 initSelection 附加 jquery select2 值

    这是我使用 ajax 进行的 select2 多重选择 最初我在 initselection 中设置一些值 如下所示 initSelection function element callback var data id 4 zipcode
  • 对引用程序集中的类进行 GetType 失败

    我有一个引用域项目的 asp net Web 项目 在 Web 项目中 我想使用反射从域项目创建类的实例 但我总是得到 null 在 VB 中什么也没有 注意 我使用的是非完全限定的类名 并希望按照 MSDN 似乎指示的那样执行搜索 在程序
  • 如何在不使用 vba 创建 Internet Explorer 对象的情况下解析 html?

    我工作的任何计算机上都没有 Internet Explorer 因此创建 Internet Explorer 对象并使用 ie navigate 解析 html 并搜索标签是不可能的 我的问题是 如何在不使用 IE 的情况下自动将带有标签的
  • 使用芬威克树或 BIT 的数组中非递减子序列的最大和

    我们如何使用芬威克树找到数组中非递减子序列的最大和 例如我们有 1 4 4 2 2 3 3 1 这里非递减子序列的最大和是 11 1 2 2 3 3 可以使用动态规划算法找到最大和 扫描数组并将每个元素的值添加到有效的最大子序列和 子序列以
  • 使用 Python Paramiko 使用多个连接/线程将大文件上传到 SFTP 服务器

    我正在尝试使用线程和 python paramiko 库将文件分块 SFTP 到远程服务器 它在不同的线程中打开本地文件和 sftp 块到远程服务器 我基本上遵循这个解决方案 它使用相同的方法通过 SFTP 下载大文件 我想改为发送大文件
  • vim 在特定字母上按“enter”

    我想在文件中的箭头符号上按 Enter 键 基本上 按下 Enter 键后 箭头键会折叠以显示更多文本 我有很多这样的方向键 wp filter array 365 wp filter pre term name array 2 彻底崩溃后
  • Firebase:如何从外部数据库读取?

    我在另一台服务器上的 PostgreSQL 中有一些数据 我需要读取这些数据以将其包含在我的 Firebase 应用程序中 然后渲染图表 我只有数据库连接字符串 没有端点可以返回该数据 我会限制在 Firebase 上使用身份验证和角色输入
  • 计算图的关键路径

    对于图论作业 我要求计算 s 关键路线以及项目的时间松弛 格式如下 入口 输入的第一行是一个整数 C 它表示测试用例的数量 对项目活动进行建模的图表 每个测试用例的第一行分别包含两个整数N和M 其中N代表项目中的节点数和活动量M 然后是m行
  • 比较熊猫不同年份的同一天

    我是一个新手 仍在试图弄清楚 Pandas 拆分 应用 组合才刚刚开始有意义 但我还没有做到 我正在尝试获取前几年 2013 2015 同一天的历史最高和最低销售电话号码 然后用另一列告诉我 2016 年电话销售高于之前高点或低于之前低点的
  • 复制 C++ 抽象类

    好的 这是一些代码 include
  • iPhone SDK:URL请求未超时

    我遇到了网络请求应该超时的问题 但该方法未被调用 请求如下 define kCONNECT TIMEOUT 20 0 request NSMutableURLRequest requestWithURL aUrl request setHT
  • 使用 C# 创建的图像 - 如何通过 SQL 将它们插入到 BLOB 中

    假设我捕获屏幕截图 有我的代码 int sWidth 1600 sHeight 1200 Bitmap B M P Bitmap sWidth sHeight Graphics gfx Graphics FromImage Image B
  • 带有 ARM M1 的 Mac 上的 cmake 正在运行 x86_64 架构而不是 arm64 的链接器

    我正在尝试编译glfw从具有 M1 arm64 处理器的 Mac 上的源代码开始 在运行链接器时 cmake 奇怪地尝试链接 x86 64 架构的项目 而二进制文件是为 arm64 构建的 我克隆项目 创建名为的构建文件夹cmake bui