【发布时间】:2021-08-18 20:26:36
【问题描述】:
我正在尝试围绕 C/C++ 中的静态库编写 Swift 包装器。
整个库由多个静态库(*.a)和头文件组成。
我的文件结构如下:
Info.plist
module.modulemap
MyFrameworkProject.h
Wrapper/
WrapperClass.swift
Dependencies/
third_party_lib_1/
include/
main_1.h
subh1.h
subh2.h
lib/
libtp_1.a
third_party_lib_2/
include/
main_2.h
subh1.h
subh2.h
lib/
libtp_2.a
third_party_lib_3/
include/
main_3.h
subh1.h
subh2.h
lib/
libtp_3.a
module.modulemap以下内容:
module MyFrameworkInternalUtils {
header "Dependencies/third_party_lib/include/main_1.h"
export *
}
main_1.h 包含我想在我的 Swift 包装器中使用的所有声明。
我已将 Dependencies/third_party_lib/include 添加到项目的 Header Search Paths 中,并将库添加到“使用静态库链接二进制文件”构建阶段。
但是,在构建项目时,我收到了抱怨“assert”和“jmp_buf”未声明的错误消息。这些是在third_party_lib_3/sub1.h 和“third_party_lib_2/sub2.h”之类的文件中声明的。而third_party_lib_1/main.h 递归包含这些文件(意思是third_party_lib_1/main.h 包含third_party_lib_2/main.h 和third_party_lib_2/main.h 包含third_party_lib_2/sub2.h)。
我猜这与标题搜索路径/包含路径有关,但我无法弄清楚究竟是什么。
我错过了什么?我已经花了一些时间来适应 LLVM 的 modulemap 文件格式。
【问题讨论】:
-
将所有需要的标头添加到模块映射中。
-
@EugeneDudnyk 如果标题超过 100 个,我该怎么办? Afaik 包含的顺序很重要。
标签: ios swift xcode linker frameworks