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

如何为Swift库项目生成纯C/C++头文件以便在Qt中引用

Swift静态库生成C/C++头文件及Qt接入步骤

1. 提前处理Swift侧接口

所有需要对外暴露给C/C++调用的逻辑,需要先做C兼容标记:

  • 普通函数、全局变量添加@_cdecl("对外暴露的C函数名")注解
  • Swift类、结构体等独有类型建议封装为不透明指针的C风格操作接口,不要直接暴露Swift原生类型结构
    示例Swift代码:
@_cdecl("swift_calculate_sum")
public func calculateSum(a: Int32, b: Int32) -> Int32 {
    return a + b
}

// 类类型封装示例
public class TestHandler {
    var count: Int = 0
}

@_cdecl("test_handler_create")
public func createHandler() -> UnsafeMutableRawPointer {
    return Unmanaged.passRetained(TestHandler()).toOpaque()
}

@_cdecl("test_handler_release")
public func releaseHandler(handler: UnsafeMutableRawPointer) {
    Unmanaged<TestHandler>.fromOpaque(handler).release()
}

2. 生成C兼容头文件

使用Swift编译器内置的头文件生成能力,执行以下命令即可生成对应头文件,注意替换路径、架构、模块名参数为你自己的项目配置:

swiftc -emit-objc-header Test.h \
-module-name Test \
-sdk $(xcrun --sdk macosx --show-sdk-path) \
-target arm64-apple-macosx13.0 \
./Sources/Test/*.swift

生成的Test.h默认兼容ObjC/C/C++,如果需要纯C版本,手动删除头文件中@class、@protocol等ObjC专属语法块,仅保留C函数声明部分即可。

3. Qt项目接入配置

3.1 头文件引入处理

在Qt的C代码中引入头文件时,需要用extern "C"包裹,避免C名称修饰导致链接失败:

extern "C" {
#include "Test.h"
}

3.2 项目配置修改

在Qt项目的.pro文件中添加以下配置:

# 替换为头文件所在实际路径
INCLUDEPATH += $$PWD/../swift_lib_output
# 替换为静态库所在实际路径,链接libTest.a
LIBS += -L$$PWD/../swift_lib_output -lTest
# macOS环境下需要额外链接依赖框架
LIBS += -framework Foundation -framework Swift

注意事项

  • 静态库的编译架构需要和Qt项目的目标架构完全一致,否则会出现架构不匹配的链接错误
  • 如果Swift库使用了高版本Swift特性,需要确保目标运行环境有对应版本的Swift运行时支持

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 22:48:01