在 Xcode 项目中使用 C/C++ 库时未找到体系结构 x86_64 的符号

Symbol(s) not found for architecture x86_64 when using C/C++ library in Xcode project

我正在开发一个 Xcode 项目,该项目使用 C/C++ 库,我已将源代码导入到我的项目中。

我已经创建了对应的桥接头,并且正在使用我最近创建的测试方法来查看代码是否有效。构建项目时出现错误

Symbol(s) not found for architecture x86_64

Xcode中显示的错误的完整输出是这样的

我的部署目标是 iOS11,所以没有设备应该使用 32 位,但我收到与 32 位架构相关的错误。

MyApp-桥接-Header.h

//
//  Use this file to import your target's public headers that you would like to expose to Swift.
//

#import "main.h"

头文件

#ifndef main_h
#define main_h

#include <stdio.h>

int my_print();

#endif /* main.h */

由于编译器抱怨找不到“_my_print”的定义,您可以 1) 检查链接库是否包含 _my_print 的定义 2) 如果您使用 XCODE UI 构建,请尝试检查路径中是否添加了所有源并且库是否完好无损

对我来说,这似乎是直截了当的链接问题和错误配置

在尝试了很多很多人声称它解决了与此类似的问题之后,我在不知不觉中想出了解决方案。

我之前的 main.h 文件就是这个

#ifndef main_h
#define main_h

#include <stdio.h>

int my_print();

#endif /* main.h */

extern "C" 围绕我的函数解决了它,现在我可以使用 Swift 与我的 C 和 C++ 库交互。现在 main.h 文件看起来像这样

#ifndef main_h
#define main_h

#include <stdio.h>

#ifdef __cplusplus
extern "C" {
#endif
    int my_print();
#ifdef __cplusplus
}
#endif

#endif /* main.h */

我不是 100% 确定它是如何工作的,所以如果有人对它为什么起作用有合理的解释,我会非常高兴听到它。