You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Mac(arm64)静态编译时tiff库无法找到CMath::CMath链接目标问题

解决Mac ARM64平台静态编译libtiff时CMath::CMath目标未找到的CMake错误

问题场景

在Mac ARM64平台下,通过ExternalProject_Add构建静态libtiff库后,执行find_package(TIFF REQUIRED)时触发如下CMake错误:

CMake Error at /path/to/GcoPS-build-static/ep/TIFF/lib/CMake/tiff/TiffTargets.cmake:61 (set_target_properties):
The link interface of target "TIFF::tiff" contains:

CMath::CMath

but the target was not found. Possible reasons include:

* There is a typo in the target name.
* A find_package call is missing for an IMPORTED target.
* An ALIAS target is missing.

问题原因

你使用的libtiff仓库(https://gitlab.com/faxguy/libtiff-tools.git)的master分支最近可能更新了构建逻辑,将系统数学库封装为CMath::CMath目标,但该目标的定义并未被正确导出到TIFF的CMake配置文件中,导致主项目无法识别这个依赖目标。

解决办法

方案一:手动创建CMath::CMath别名目标

在find_package(TIFF)之前,添加以下CMake代码,手动补全缺失的目标定义:

# 为Mac平台创建CMath::CMath接口目标,对应系统数学库m
if(NOT TARGET CMath::CMath)
  add_library(CMath::CMath INTERFACE IMPORTED)
  if(APPLE)
    target_link_libraries(CMath::CMath INTERFACE m)
  endif()
endif()

# 后续执行find_package
find_package (TIFF REQUIRED COMPONENTS tiff)

方案二:禁用libtiff的CMath依赖

修改libtiff构建的缓存参数,强制其不使用CMath目标:
在cmake_cache_args列表中添加:

-DCMAKE_DISABLE_FIND_PACKAGE_CMath:BOOL=ON

完整的cmake_cache_args如下:

set(cmake_cache_args
  -DBUILD_SHARED_LIBS:BOOL=OFF
  -Dtiff-docs:BOOL=OFF
  -Dtiff-test:BOOL=OFF
  -Dtiff-tools:BOOL=OFF
  -Djpeg:BOOL=OFF
  -Doldjpeg:BOOL=OFF
  -Djpeg12:BOOL=OFF
  -Dlzma:BOOL=OFF
  -Dzstd:BOOL=OFF
  -Dwebp:BOOL=OFF
  -DCMAKE_DISABLE_FIND_PACKAGE_CMath:BOOL=ON
  -DCMAKE_INSTALL_PREFIX:PATH=${CMAKE_BINARY_DIR}/ep/${ep}
  )

方案三:切换到libtiff稳定版本

避免使用最新的master分支,改用成熟的稳定版本tag(比如v4.6.0),修改ExternalProject_Add中的GIT_TAG:

ExternalProject_Add(${ep}
  PREFIX ${CMAKE_BINARY_DIR}/ep/${ep}
  GIT_REPOSITORY https://gitlab.com/faxguy/libtiff-tools.git
  GIT_TAG v4.6.0  # 替换为稳定版本tag
  CMAKE_ARGS -DCMAKE_BUILD_TYPE=Release
  CMAKE_CACHE_ARGS ${cmake_cache_args}
  BUILD_COMMAND ${CMAKE_COMMAND} --build <BINARY_DIR>
  INSTALL_COMMAND ${CMAKE_COMMAND} --build <BINARY_DIR> --target install
)

额外注意

确保TIFF的安装目录被加入到CMAKE_PREFIX_PATH,让find_package能正确找到配置文件:

list(APPEND CMAKE_PREFIX_PATH ${CMAKE_BINARY_DIR}/ep/TIFF)

内容的提问来源于stack exchange,提问作者arthur.sw

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.19 23:35:56