c++ - 在 XCode 中桥接 C++ 和 Swift,正确的build设置是什么?

标签 c++ c xcode swift interop

当我尝试调用我的 C++ 实现文件中的函数时(在 header 中使用 #ifdef __cplusplus extern "C"{} 技巧标记为 C 兼容),我收到错误:

“使用未解析的标识符,'helloWorld()'”

我只是通过将 cpp 和头文件添加到我的项目并在询问我是否要创建桥接 header 时单击“确定”来创建桥接 header 。我在桥接 header 中#including“test.h”,里面有函数声明,但出于某种原因,Swift 就是看不到这个函数。

最奇怪的是,我创建了一个新项目并执行了完全相同的过程,并且调用 helloWorld() 工作正常,所以这是关于现有项目的一些事情,我试图将 cpp 文件添加到它不起作用.

然后我假设这是一个build设置问题,并且我一定是在某些地方弄乱了它们,可能是在我尝试导入静态 C/CPP 库时(我已经删除了,但我为它更改的一些build设置可能会保留)。

那么,是否有任何我应该知道的build设置可以解决这个问题?或者有没有办法将我的build设置完全重置为默认值(即使这意味着我必须重新创建桥接 header 以使桥接 header build设置恢复原位)?

感谢您的所有帮助!

詹姆斯

---编辑---

这是我的 cpp header :

Test.h

这是我的cpp实现文件:

Test.cpp

这是我的桥接头:

HawkEye-Bridging-Header.h

这里是 Swift 项目的相关部分:

viewDidLoad in viewController.swift

这里是设置桥接头的build设置:

Relevant build setting

最佳答案

好的 - 这已经解决了。问题是桥接头需要从常规目标和测试目标中实现,这是在我现有的项目中,因为我正在进行单元测试。

我只是进入了测试目标的build设置并添加了适当的 Objective-C Bridging Header,然后一切正常。

希望对大家有帮助!

关于c++ - 在 XCode 中桥接 C++ 和 Swift,正确的build设置是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29377075/

相关文章:

c - 将 char 附加到没有值的字符串

ios - 无法在 xcode 项目中测试网络调用

c++ - Dllimport 无法导入旧的 Borland dll

c++ - Delphi thiscall 调用约定

c++ - 什么决定了原始数据类型的大小?

ios - 使用 TWTweetComposeViewController 的部署目标与基础 SDK

c++ - 从函数返回 std::variant

C++ 提取 .reg 文件到注册表

可变模板参数 : why isn't this working 上的 C++11 初始化程序列表

sql - 是否可以分析 SQLite SQL 查询?