如何使用 c++ 源代码和静态库创建 iOS 框架

How to create iOS Framework with c++ sources and static libraries

本文关键字:创建 iOS 框架 静态 何使用 c++ 源代码      更新时间:2023-10-16

我有C ++源代码和一些第三方静态库,代码正在使用这些库。我有一个简单的iOS应用程序,它运行此代码。基本上,有这样的模块:

  1. 苹果应用程序
  2. my_lib.a
  3. 第三方静态库

和依赖关系: ios_app -> my_lib.a -> 第三方静态库

一切都按预期工作。

现在我想创建一个iOS框架,它将具有my_lib.a和3rd_party.a,ios_app会使用它。 我在做什么:

add_library (my_lib SHARED "")
target_sources(my_lib PRIVATE _my_source_files_)
set_target_properties(my_lib PROPERTIES FRAMEWORK TRUE _OTHER_KEYS_)
target_link_libraries (my_lib _3rd_party_libs)

然后我构建框架并检查它有什么命令: nm -gU my_framework.framework/my_framework 问题是,该 id 不显示我的源文件中的符号,而仅显示来自第三方库的符号。结果,在使用这样的框架时,我收到编译错误"找不到架构符号......">

另一方面,如果我将我的框架声明为"静态":

add_library (my_lib SHARED "")

但在那之后,我没有在输出中看到所有这些第三方库,而是看到了来自我的来源的符号。

我用谷歌搜索过,没有找到任何答案或例子。可能是我错过了什么?

解决方案是以正确的方式导出类。

  1. 使用 cmake generate_export_header(...( 命令生成导出标头 https://cmake.org/cmake/help/latest/module/GenerateExportHeader.html;
  2. 在类声明中使用生成的宏,这些宏应该在外部使用;