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

在Xcode中为独立Framework设置预处理器宏及解决cblas_dasum兼容问题

解决iOS中使用cblas_dasum的预处理器宏设置与弃用问题

1. 找到Xcode中预处理器宏的设置入口

按以下步骤定位并添加所需宏:

  • 在Xcode中选中你的独立模块目标(注意不是主App目标)
  • 切换到Build Settings标签页
  • 在搜索框输入Preprocessor Macros(中文界面搜索“预处理器宏”)
  • 在对应配置(Debug/Release)的输入框中,添加ACCELERATE_NEW_LAPACK=1和ACCELERATE_LAPACK_ILP64=1,多个宏用逗号分隔

2. 替代弃用的cblas_dasum(iOS16.4+推荐方案)

由于cblas_dasum在iOS16.4及以上版本已被弃用,推荐使用苹果官方维护的vDSP系列API实现相同功能,性能同样高效且无兼容性警告:

Swift示例

import Accelerate

func sumOfAbsoluteValues(_ values: [Double]) -> Double {
    guard !values.isEmpty else { return 0.0 }
    var absoluteValues = values
    var sum: Double = 0.0
    // 计算数组元素的绝对值
    vDSP_vabsD(absoluteValues, 1, &absoluteValues, 1, vDSP_Length(values.count))
    // 对绝对值数组求和
    vDSP_sveD(absoluteValues, 1, &sum, vDSP_Length(values.count))
    return sum
}

C/C++示例

#include <Accelerate/Accelerate.h>
#include <stdlib.h>

double calculateAbsoluteSum(const double* array, size_t count) {
    if (count == 0) return 0.0;
    double sum = 0.0;
    // 分配临时内存存储绝对值数组(避免修改原数组)
    double* absArray = malloc(count * sizeof(double));
    vDSP_vabsD(array, 1, absArray, 1, (vDSP_Length)count);
    vDSP_sveD(absArray, 1, &sum, (vDSP_Length)count);
    free(absArray);
    return sum;
}

3. 兼容性说明

  • 若需兼容iOS16.4以下版本,可保留cblas_dasum并添加预处理器宏,同时建议加入系统版本判断,在高版本自动切换到vDSP实现
  • vDSPAPI无需额外宏配置,且针对苹果硬件做了原生优化,是长期维护的最优选择

内容的提问来源于stack exchange,提问作者Baffo rasta

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 15:00:55