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

如何将C++动态库正确集成到iOS应用(含嵌入式框架方案)

将C++动态库集成到iOS应用的正确方法

iOS不支持直接使用普通.dylib文件,必须将C代码打包成iOS动态Framework(Dynamic Framework),再配合Objective-C包装层实现OC与C++的交互,以下是完整落地步骤:

一、用CMake生成iOS动态Framework

创建CMakeLists.txt,配置iOS交叉编译规则与Framework输出属性:

cmake_minimum_required(VERSION 3.18)
project(CalculatorFramework)

# 配置iOS编译环境
set(CMAKE_SYSTEM_NAME iOS)
set(CMAKE_OSX_SYSROOT iphoneos)
# 指定支持的CPU架构,按需调整
set(CMAKE_OSX_ARCHITECTURES "arm64;x86_64")
set(CMAKE_XCODE_ATTRIBUTE_ONLY_ACTIVE_ARCH NO)
set(CMAKE_CXX_STANDARD 11)

# 以动态库形式编译C++代码
add_library(CalculatorFramework SHARED
    Calculator.cpp
    Calculator.hpp
)

# 配置Framework核心属性
set_target_properties(CalculatorFramework PROPERTIES
    FRAMEWORK TRUE
    FRAMEWORK_VERSION A
    MACOSX_FRAMEWORK_IDENTIFIER com.yourcompany.CalculatorFramework
    MACOSX_FRAMEWORK_INFO_PLIST ${CMAKE_CURRENT_SOURCE_DIR}/Info.plist
    PUBLIC_HEADER Calculator.hpp
)

配套创建Info.plist(可从Xcode新建Framework项目中复制模板,修改Bundle ID等信息),然后执行编译:

mkdir build && cd build
cmake .. -G Xcode
# 编译模拟器版本
xcodebuild -project CalculatorFramework.xcodeproj -scheme CalculatorFramework -sdk iphonesimulator -configuration Release
# 编译真机版本
xcodebuild -project CalculatorFramework.xcodeproj -scheme CalculatorFramework -sdk iphoneos -configuration Release
# 合并真机/模拟器架构(可选,方便跨环境调试)
lipo -create build/Release-iphoneos/CalculatorFramework.framework/CalculatorFramework build/Release-iphonesimulator/CalculatorFramework.framework/CalculatorFramework -output CalculatorFramework
cp CalculatorFramework build/Release-iphoneos/CalculatorFramework.framework/

二、编写Objective-C++包装层

OC无法直接调用C++类,需写一层包装器暴露OC接口:

CalculatorWrapper.h(纯OC头文件,供iOS项目直接调用)

#import <Foundation/Foundation.h>

@interface CalculatorWrapper : NSObject

- (float)addA:(float)a andB:(float)b;
- (float)subtractA:(float)a fromB:(float)b;
- (float)multiplyA:(float)a andB:(float)b;
- (float)divideA:(float)a byB:(float)b;

@end

CalculatorWrapper.mm(Objective-C实现,链接C库)

#import "CalculatorWrapper.h"
#include "Calculator.hpp"

@implementation CalculatorWrapper {
    Calculator *_calculator;
}

- (instancetype)init {
    self = [super init];
    if (self) {
        _calculator = new Calculator();
    }
    return self;
}

- (void)dealloc {
    delete _calculator;
    [super dealloc];
}

- (float)addA:(float)a andB:(float)b {
    return _calculator->add(a, b);
}

- (float)subtractA:(float)a fromB:(float)b {
    return _calculator->subtract(b, a);
}

- (float)multiplyA:(float)a andB:(float)b {
    return _calculator->multiply(a, b);
}

- (float)divideA:(float)a byB:(float)b {
    return _calculator->divide(a, b);
}

@end

若要简化集成,可将这两个文件加入CMake的源文件列表,让Framework直接包含OC接口。

三、集成Framework到iOS项目

  1. 将生成的CalculatorFramework.framework拖入Xcode项目,勾选「Copy items if needed」
  2. 在项目General标签页的「Frameworks, Libraries, and Embedded Content」中,将CalculatorFramework.framework的Embed设置为Embed & Sign(必须签名,否则运行时会报错)
  3. 在需要调用的OC文件中引入头文件:
#import <CalculatorFramework/CalculatorWrapper.h>

四、调用示例

CalculatorWrapper *calculator = [[CalculatorWrapper alloc] init];
float addResult = [calculator addA:3.2 andB:5.8];
NSLog(@"加法结果:%f", addResult);

关键注意事项

  • iOS仅允许签名的动态Framework嵌入应用,Embed & Sign是必选配置
  • 发布正式版本时,可移除模拟器架构,减小包体积
  • 若无需动态更新库,也可选择静态Framework,但需调整CMake的SHARED为STATIC

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 06:52:49