Mac M1 Qt ld: symbol(s) not found for architecture x86_64

在MacM1芯片上使用QtCreator和Cmake管理的vtk项目遇到编译错误,原因是VTK库可能未针对arm64架构编译,而QtCreator默认采用x86_64架构。通过在CmakeLists中添加`set(CMAKE_OSX_ARCHITECTURES arm64)`来指定目标架构为arm64,从而解决连接错误。另外,也提出了编译VTK时直接指定X86架构作为备选解决方案。
摘要由CSDN通过智能技术生成

环境:MAC M1(arm架构)

工具:Qt vtk7.1

现象:

  1. 下载编译vtk7.1
  2. 写了一段vtk代码,用cmake管理项目
  3. QtCreator打开cmake
  4. 编译代码报错“ld: symbol(s) not found for architecture x86_64”

CmakeLists:

cmake_minimum_required(VERSION 2.8)

PROJECT(vtkLearn)

set(CMAKE_CXX_STANDARD 11)

find_package(VTK REQUIRED)
include(${VTK_USE_FILE})

add_executable(${PROJECT_NAME} main.cpp )

target_link_libraries(${PROJECT_NAME} ${VTK_LIBRARIES})

问题分析:

由报错原因结合设备M1芯片为Arm架构,猜想因编译vtk7.1的库时未指定指令集架构,所以默认以arm64的方式编译。在QtCreator中编译时,默认以X86的方式进行编译,导致连接错误。

问题解决:

cmake指定编译架构为arm64.增加一行:

set(CMAKE_OSX_ARCHITECTURES arm64)

完整CMakeLists:

cmake_minimum_required(VERSION 2.8)

PROJECT(vtkLearn)

set(CMAKE_CXX_STANDARD 11)

set(CMAKE_OSX_ARCHITECTURES arm64)

find_package(VTK REQUIRED)
include(${VTK_USE_FILE})

add_executable(${PROJECT_NAME} main.cpp )

target_link_libraries(${PROJECT_NAME} ${VTK_LIBRARIES})

扩展:

除了上面的解决方法,猜想还有如下解决方法(未验证)

  • 编译VTK时指定架构为X86.
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值