环境:MAC M1(arm架构)
工具:Qt vtk7.1
现象:
- 下载编译vtk7.1
- 写了一段vtk代码,用cmake管理项目
- QtCreator打开cmake
- 编译代码报错“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.