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

如何在Swift版iOS项目中像JNI那样导入CMake(C++)项目?

可行解决方案:CMake C++项目集成到Swift iOS应用

1. 用CMake编译iOS兼容的库

不用修改原CMake项目,通过交叉编译参数让CMake生成iOS目标的静态库(.a)或.framework:

  • 编写一个iOS专属的CMake工具链文件(比如ios.toolchain.cmake),指定SDK路径、目标架构(arm64真机、x86_64模拟器)、iOS最低版本等参数。
  • 编译时通过cmake命令传递工具链文件:
    cmake -S . -B build-ios -DCMAKE_TOOLCHAIN_FILE=ios.toolchain.cmake -DIOS_PLATFORM=OS -DCMAKE_OSX_ARCHITECTURES=arm64
    cmake --build build-ios
    
  • 可以用lipo命令合并真机和模拟器的库,生成通用库方便调试。

2. 编写Objective-C++桥接层

Swift无法直接调用C代码,需要用**Objective-C(.mm后缀文件)**做中间层,封装C++接口为Objective-C方法:

  • 比如原C++有个功能类:
    class Calculator {
    public:
        int add(int a, int b) { return a + b; }
    };
    
  • 写对应的桥接类CalculatorBridge.mm:
    #import <Foundation/Foundation.h>
    #include "Calculator.h"
    
    @interface CalculatorBridge : NSObject
    - (NSInteger)addA:(NSInteger)a andB:(NSInteger)b;
    @end
    
    @implementation CalculatorBridge {
        Calculator* _calculator;
    }
    
    - (instancetype)init {
        self = [super init];
        if (self) {
            _calculator = new Calculator();
        }
        return self;
    }
    
    - (void)dealloc {
        delete _calculator;
    }
    
    - (NSInteger)addA:(NSInteger)a andB:(NSInteger)b {
        return _calculator->add(a, b);
    }
    
    @end
    

3. 集成到Swift项目

  • 将编译好的库(.a或.framework)、C++头文件、桥接文件添加到Xcode项目中。
  • 在Xcode的Build Settings里配置:
    • 把桥接文件路径加到Objective-C Bridging Header(如果用桥接头文件方式),或者创建module.modulemap声明模块让Swift导入。
    • 在Other Linker Flags中添加-lc++(对应C++标准库,根据你的项目调整)。
  • 现在就能在Swift里直接调用桥接类:
    let bridge = CalculatorBridge()
    let result = bridge.addA(10, andB: 20)
    print(result) // 输出30
    

注意事项

  • 确保CMake编译时的iOS版本和你的Swift项目最低版本一致。
  • 桥接层要避免暴露C++类型给Swift,所有对外接口都用Objective-C/Swift兼容的类型(比如NSInteger替代int,NSString替代std::string)。
  • 内存管理要注意:在桥接类的dealloc中销毁C++对象,避免内存泄漏。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 16:01:13