c++ - 使用静态库的自定义框架 - 在框架模块 Xcode 9 中包含非模块化 header

标签 c++ c xcode ios-frameworks

我已经看到了很多关于这个问题的答案,但没有一个是基于我的情况的,并且“ALLOW_NON_MODULAR_INCLUDES_IN_FRAMEWORK_MODULES = YES”也不起作用。

我正在开发一个框架,它是 C 库的实现。图书馆是OpenHome编译并创建 fat libs 后,我有一个包含所有 .a 和 header 的文件夹。

由于它有一个“调试”和“发布”文件夹,我将这两个文件夹复制到项目的根目录中,将 .a 文件导入到“链接二进制文件与库”中,然后在“build设置”中”,我将“标题搜索路径”设置为标题文件夹的位置。

为了导入我需要实现的所有 header ,我使用一个名为“MyHeaders.hpp & MyHeader.cpp”的 C++ 类,我将 .hpp 设为公开,然后将其导入到我的 MyFramework.h(Umbrella 文件)中:

#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wdocumentation"
#import "MyHeaders.hpp"
#pragma clang diagnostic pop

MyHeaders.hpp:

#ifndef MyHeaders_hpp
#define MyHeaders_hpp

#include <stdio.h>


/*** CP -PROXIES- ***/
/** Header That Includes all the CP Related Headers **/
#include "OpenHome/Net/C/CpStack.h"

/** CP Services **/
/*UPnP*/
#include "OpenHome/Net/C/CpUpnpOrgConnectionManager1.h"
#include "OpenHome/Net/C/CpUpnpOrgRenderingControl1.h"
#include "OpenHome/Net/C/CpUpnpOrgAVTransport1.h"

#endif /* MyHeaders_hpp */

错误来自每个包含。我已经替换了 wit import 但它也不起作用。

值得一提的是,这个项目配置是我在开始实现和测试的项目(单 View 应用程序)中使用的配置。唯一的区别是桥接头的存在。

有什么想法吗?

最佳答案

经过研究,我找到了问题和解决方案

当我#include "OpenHome/Net/C/CpUpnpOrgConnectionManager1.h"时,此 header 不是公开的或包含非公开 header 。

在基于 Swift 的框架中导入此 header 的解决方案是创建一个模块。

我在目标文件夹中创建了一个文件夹“MyModuleFolder”,并在其中创建了一个“module.modulemap”文件,如下所示

module OHNet[system]{

    header "MyHeaders.hpp"

    export *

}

之后,在“Build Settings”->“Swift Compiler - Search Paths”->“Import Paths”中,我添加了“MyModuleFolder”的位置。

最后,

import OHNet

在每个 swift 文件中

希望对您有所帮助。

关于c++ - 使用静态库的自定义框架 - 在框架模块 Xcode 9 中包含非模块化 header ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52097437/

相关文章:

c++ - 对字符串数组进行归并排序

java - 违反里氏替换原则怎么办?

C++:未声明的标识符

c++ - 我需要初始化 std::string 吗

c - 使用 fgets 时 EOF 不起作用

c - C 中的 double 初始化为舍入值

c - scanf 加载 struct -> char[] 的问题

c++ - 如何在终端中使用来自 Xcode 的可用 C++17 标志

ios - xcode 中目标的物理位置

ios - 在方法中返回完成处理程序之前如何等待委托(delegate)完成?