如何在 x86_64 Swift 项目中使用 i386 框架

Posted

技术标签:

【中文标题】如何在 x86_64 Swift 项目中使用 i386 框架【英文标题】:How to use i386 Framework in x86_64 Swift Project 【发布时间】:2015-12-05 11:01:28 【问题描述】:

我为 CanonEDSDK 创建了一个 Objective-C 框架,其中EdsInitializeSDK 仅支持 i386 架构。我将框架导入到 Swift 项目中,但在调用 EdsInitializeSDK() 时出现以下错误:

“_EdsInitializeSDK”,引用自: test.AppDelegate.applicationDidFinishLaunching (test.AppDelegate)(__ObjC.NSNotification) -> () in AppDelegate.o

ld:未找到架构 x86_64 的符号

clang:错误:链接器 命令失败,退出代码为 1(使用 -v 查看调用)

【问题讨论】:

不能使用来自 64 位应用程序的 32 位库。 那么你建议我做什么,@MartinR? 您必须将两者都编译为 32 位或都编译为 64 位。然而——据我所知——Swift 在 OS X 和 64 位 ios 设备上需要 64 位。因此,唯一的机会是以 64 位重新编译框架,否则你就不走运了 :) 【参考方案1】:

正如@MartinR 在 cmets 中所描述的,Swift 是 64 位的,所以所有使用的库都应该是 64 位的。适用于 OSX 的 EDSDK v3.2.1 确实包含您可以使用的 64 位版本。

请注意,在这个 64 位版本中,对 RAW 文件的操作(保存为 TIFF,但甚至可以读取信息)只能对由一组有限的新相机创建的文件执行:

EOS 5DS / EOS 5DS R / EOS REBEL T6s / EOS 760D / EOS 8000D / EOS REBEL T6i / EOS 750D / EOS Kiss X8i / EOS M3

对旧相机文件的操作将尝试动态加载 32 位库,从而导致运行时动态链接错误!

【讨论】:

EDSDK 不兼容 64 位。您不能从 64 位应用程序调用 EDSDK 库。对于相机连接功能和有限的图像处理功能支持的相机,我们发布了一个 64 位库作为试用版的测试版。请注意:64 位模块中的图像处理功能支持的相机限制如下。 EOS 5DS / EOS 5DS R / EOS REBEL T6s / EOS 760D / EOS 8000D / EOS REBEL T6i / EOS 750D / EOS Kiss X8i / EOS M3 这是我在 doc 文件中得到的,我使用的是 EOS 700D。有什么建议吗? 您可以使用 beta 64 位 sdk,只要您不使用该应用程序处理任何原始文件(您可以从相机下载它们) 我没有下载 beta 64bit sdk 的链接,是吗? @KielSoft 注册 Canon 的 Digital Imaging Developer Program (e.g. for Canon Europe use didp.canon-europa.com) ,然后你应该能够找到“Canon EOS Digital SDK (EDSDK) v3.2.1”,文件名为“EDSDKv0302-1M.zip” 注意:我注意到 EDSDK_64 不在 EDSDKv0302-1M.zip 中,但在 3.2 版本的 EDSDKv0302M.zip 中找到了它。

以上是关于如何在 x86_64 Swift 项目中使用 i386 框架的主要内容,如果未能解决你的问题,请参考以下文章

架构 x86_64 的重复符号(实现 FBSDKCoreKilt)Swift

如何解决 NSScanner 上的“架构 x86_64 的未定义符号”? react-native 中的 Swift pod

swift - 仅适用于架构 x86_64 模拟器的重复符号

Swift 测试给出错误“架构 x86_64 的未定义符号”

如何使用 fmt 库而不获取“架构 x86_64 的未定义符号”

Xcode 错误 - 架构 x86_64 的未定义符号?