【问题标题】:Convert C & submodule included objective-C project (linphone) as a framework or static library?将 C 和子模块包含的目标 C 项目(linphone)转换为框架或静态库?
【发布时间】:2017-10-30 10:06:17
【问题描述】:

我想合并两个项目。

第一个项目

  1. 用 Objective C 和 swift 2.3 编写
  2. Pod 依赖项
  3. 有不同的目标
  4. 子模块依赖关系

第二个项目

https://github.com/BelledonneCommunications/linphone

  1. 用Objective C编写
  2. 依赖于用 C 编写的 linphone SDK
  3. 子模块依赖关系

如何将 Second project(linphone) 转换为框架?

编辑 1

我已经集成了 linphone 项目(第二个项目),包括 C 编写了 linphone SDK 并纠正了所有编译时错误。现在我 我能够运行该项目。但是对于 Submodules 依赖,我会怎么做呢?

编辑 2

现在,使用我们自己的 SIP 服务器帐户成功登录。正确的 现在我的问题是

LinphoneManager
 - (void)createLinphoneCore
 - theLinphoneCore = linphone_core_new_with_config(&linphonec_vtable, _configDb, (__bridge void *)(self)); 

LinphoneCore 为 NULL,为什么?

注意:我仍然没有集成子模块,但我可以进行音频和视频通话,一切正常。

【问题讨论】:

    标签: ios objective-c ios-frameworks linphone linphone-sdk


    【解决方案1】:

    构建完整的 liblinphone SDK 的唯一合理方法是通过适当的客户端存储库,例如linphone-iphone 或 linphone-android。正如您所发现的,可以使用以下方法构建为框架或静态库:

    ./prepare.py -c && ./prepare.py -DENABLE_STATIC_ONLY=ON && make && make zipsdk

    为库设置 DENABLE_STATIC_ONLY=ON,为框架设置 =OFF:

    请注意:截至 2017 年 6 月,框架配置仍在开发中。它在模拟器和实际硬件上构建和运行,但生成的应用程序二进制文件无法提交给 Apple,因为子框架配置不正确。如果您不需要提交(甚至不需要 TestFlight!) 2-6 个月,他们可能很快就会完成。

    如果您需要更早的功能产品,请使用静态库配置。唯一棘手的部分是在您的项目/工作区中设置所有内容。

    1. 使用上面的 prepare.py 进行全面清理和构建
    2. 将 sdk zip 文件解压到您自己的项目目录中作为 liblinphone-sdk
    3. 将 liblinphone-sdk/apple-darwin/lib 中的库添加到 XCode 的“通用”下的链接框架和库部分。单击 +,选择“添加其他”,导航到 libs 目录。不要忘记在 liblinphone-sdk/apple-darwin/lib/mediastreamer/plugins 中包含任何内容
    4. 您可能需要为标题搜索路径 $(SRCROOT)/liblinphone-sdk/apple-darwin/include 添加构建设置
    5. 您可能需要为库搜索路径 $(PROJECT_DIR)/liblinphone-sdk/apple-darwin/lib 添加构建设置
    6. linphone-iPhone 的 XCode 项目是发现您可能需要进行的其他调整的好地方。

    设置您的工作区可能需要反复试验。 Xcode 对错误的处理不是很好,但您应该能够使用 Report Navigator 视图查看完整的构建日志和错误消息。例如,如果您有一个未定义的符号,您可以尝试grep -ri SYMBOLNAME liblinphone-sdk 找出可能缺少的库。

    关于您的 EDIT 2 问题,您需要所有子模块,否则它将无法工作。 ortp、belle-sip、mediastreamer、srtp、mbedtls,它们都是必不可少的。只有 mediastreamer 插件编解码器(在某种程度上)是可选的。

    【讨论】:

    • 非常感谢您的回复。关于 EDIT 2,我有现有项目的子模块。如果我将整个文件复制粘贴到其中,它可以工作吗?我的意思是从 linphone 项目的子模块文件夹到我现有项目的子模块文件夹的所有文件。
    • 对于 linphone,Xcode 没有列出任何子模块。对于其他项目,我可以在 Xcode 中的“Development Pods”组下查看子模块的内容。在我的情况下,我可以将 linphone 子模块拖到我当前项目的 Xcode 中吗?
    • 在您制作 zipsdk 并按照我的回答的第 3 步添加静态库后,您将拥有链接到您的应用程序的所有 Linphone 子模块。您不需要直接将 Linphone 的子模块集成到源代码中或将它们与 cocoapods 集成——所有内容都是预先构建的,并通过 liblinphone-sdk 子目录包含在内。如果你需要调试到 linphone 代码,你也可以用调试编译它。 prepare.py 有很多选择。
    • drive.google.com/drive/folders/0BzQsvz8QW1xUTi0tbW9MUDFrRFE 这是没有子模块的 linphone 项目。视频通话和音频通话都可以正常工作。你能告诉我在没有子模块的情况下工作的原因是什么?我们正在使用我们自己的 SIP 服务器(UDP)
    • 请尝试理解。 Linphone 核心及其子模块用于构建 SDK。构建 SDK 后,您实际上可以删除子模块源。 Linphone-iPhone 在项目中包含子模块以便于调试,但只有二进制 SDK 对编译您的应用程序很重要。
    猜你喜欢
    • 2016-01-10
    • 2012-10-22
    • 1970-01-01
    • 1970-01-01
    • 2014-08-25
    • 2018-01-17
    • 1970-01-01
    • 2018-04-13
    • 1970-01-01
    相关资源
    最近更新 更多