在 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>