ios - 使用嵌套库创建 Cocoa Touch Framework 时出现链接错误

标签 ios xcode frameworks

我一直在创建 Cocoa Touch 框架

enter image description here

收到这个错误

Undefined symbols for architecture armv7:
  "_AVMediaTypeVideo", referenced from:
      _avf_read_header in libavdevice.a(avfoundation.o)
  "_AVMediaTypeMuxed", referenced from:
      _avf_read_header in libavdevice.a(avfoundation.o)
  "_OBJC_CLASS_$_AVCaptureDeviceInput", referenced from:
      objc-class-ref in libavdevice.a(avfoundation.o)
  "_CMSampleBufferGetImageBuffer", referenced from:
      _avf_read_header in libavdevice.a(avfoundation.o)
      _avf_read_packet in libavdevice.a(avfoundation.o)
  "_OBJC_CLASS_$_AVCaptureSession", referenced from:
      objc-class-ref in libavdevice.a(avfoundation.o)

...

  "_LoggerAudio", referenced from:
  -[KxMovieDecoder setSelectedAudioStream:] in KxMovieDecoder.o
  -[KxMovieDecoder openAudioStream:] in KxMovieDecoder.o
  -[KxMovieDecoder handleAudioFrame] in KxMovieDecoder.o
  -[KxMovieDecoder decodeFrames:] in KxMovieDecoder.o

ld: symbol(s) not found for architecture armv7
clang: error: linker command failed with exit code 1 (use -v to see invocation)

在该项目中,我使用了其他几个系统动态库和框架以及其他手动添加的静态库及其相关 header 。

该项目仅适用于 ios8,非 64。

这些库都列在 Target > General >Linked Frameworks and Libraries 中。 header 已正确包含。<​​/p>

编译和链接的相同文件在另一个(普通应用程序,非库)项目中正确执行

我尝试添加一个 pch 并添加所有必需的库,但没有任何改变。

最佳答案

动态库仅适用于 ios 8。如果您的项目需要使用动态库,请在 Linked Frameworks and LibrariesEmbedded Binaries 中添加您的框架 < strong>常规选项卡。它会成功的。

您可以更改静态库而不是动态库。 Build setting -> Mach-O -> Static libarary,并将部署目标更改为 iOS 7.0。在您的框架中更改这两项后,可以在 iOS 7.0 及更高版本上运行。

这里是在 Xcode 6 中创建静态 cocoa touch 框架的步骤。

打开 Xcode 并通过单击 File\New\Project 并选择 iOS\Framework and Library\Cocoa Touch framework 创建一个新的静态框架项目。

将产品命名为 FrameWorkName 并将项目保存到一个空目录。

自动为我们的框架创建伞头。在此 header 中,您应该使用#import

之类的语句导入我们框架的所有公共(public) header

一个静态的框架项目是由头文件和实现文件组成的,它们被编译成框架本身。您可以使用 Cocoa Touch 类创建该类。

验证build设置转到项目 Target 的build设置并确认或将“架构”设置为“标准架构”。这些是 arm64 和 armv7,并且可能是默认设置。此外,我们还需要在设置中设置少数架构,因为 iOS 应用程序需要在许多不同的架构上运行。

armv7:用于最老的支持 iOS 7 的设备 armv7s:用于 iPhone 5 和 5C arm64:用于 iPhone 5S 中的 64 位 ARM 处理器 i386:用于 32 位模拟器 x86_64:用于64位模拟器

这意味着构建尽可能快。当您存档应用程序或在 Release模式下构建时,Xcode 将为所有 ARM 架构构建,从而允许该应用程序在大多数设备上运行。

Mach-O 设置:静态库:

最终构建项目:

点击here (你有更多的细节。)

Aggregate target使用lipo结合设备和模拟器框架

lipo "${SIMULATOR_LIBRARY_PATH}/${FRAMEWORK_NAME}""${DEVICE_LIBRARY_PATH}/${FRAMEWORK_NAME}"-create -output "${FRAMEWORK}/${FRAMEWORK_NAME}"|回声

点击here你已经完成了创建通用框架的步骤

关于ios - 使用嵌套库创建 Cocoa Touch Framework 时出现链接错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27257483/

相关文章:

cocoa-touch - 模态视图 Controller 出现缓慢

iOS 扩展和 cordova : 'Cordova/CDV.h' file not found

php - 如何呈现带有 .html 扩展名的 .php URL

ios - 我如何在我的项目中运行 XCTest 时发生运行时错误

android - GradientDrawable.setStroke 宽度似乎无法正常工作

ios - 如何在 ios 中创建连接的文本字段?

iPhone:MPMusicPlayerController 停止 AVAudioPlayer

iOS - 在另一个 Xcode 项目中包含静态库项目... header 问题

ios - Xcode 中有 var_dump 吗?

ios - 将图像添加到 UINavigationBar 中的 UIButton