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

Posted

技术标签:

【中文标题】在 Xcode 项目中使用 C/C++ 库时未找到体系结构 x86_64 的符号【英文标题】:Symbol(s) not found for architecture x86_64 when using C/C++ library in Xcode project 【发布时间】:2018-04-13 10:36:16 【问题描述】:

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

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

Symbol(s) not found for architecture x86_64

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

我的部署目标是 ios 11,因此任何设备都不应使用 32 位,但我收到与 32 位架构相关的错误。

MyApp-Bridging-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 */

【问题讨论】:

什么是 C/C++ 库?没有语言 C/C++。您在哪里看到 32 位的提示?你创建了什么标题?库没有带来所需的标题吗? 使用 C 和 C++ 代码的库 my_print 是否使用 C 编译器编译,并且 main.h 包含在使用 C++ 编译的代码中? 我没有编译它,我已经将源代码(所有.h和.c文件)导入Xcode。而且我认为它是 Xcode 在我点击 build 时编译库的那个 不要垃圾标签。 C 不是 C++ 不是客观的-C 不是……我希望你明白了。并且一个库只能用要么 C C++ Objective C. 【参考方案1】:

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

在我看来,链接问题和错误配置似乎很简单

【讨论】:

【参考方案2】:

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

我之前的 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% 确定这是如何工作的,所以如果有人能合理解释为什么会这样,我很高兴听到。

【讨论】:

以上是关于在 Xcode 项目中使用 C/C++ 库时未找到体系结构 x86_64 的符号的主要内容,如果未能解决你的问题,请参考以下文章

Flutter - 使用 google_sign_in 库时未找到 <Flutter/Flutter.h>

在 Gradle Android 中实现自定义库时未解析类

制作 .ipa 时未使用 Xcode Server Bot 找到代码签名身份

尝试使用外部库时未定义的引用

使用 iOS 库时未连接故事板视图

运行 Xcode 测试时未找到 FBSnapshotTestCase 图像