链接错误使用嵌套库创建Cocoa Touch Framework

时间:2014-12-02 19:35:34

标签: 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)

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

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

这些库都列在Target>中。一般>链接的框架和库。 标题包含正确。

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

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

1 个答案:

答案 0 :(得分:2)

动态库仅适用于ios 8.如果需要在项目中使用动态库,请在链接框架和库嵌入式二进制文件中添加框架strong>常规选项卡。它将起作用。

您可以更改静态库而不是动态库。构建设置 - > Mach-O - >静态库,以及将部署目标更改为iOS 7.0。更改后,这两个在您的框架中完成的工作是在iOS 7.0及更高版本上工作。

这里步骤在Xcode 6中创建静态可可触摸框架。

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

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

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

等语句导入框架的所有公共标头

静态框架项目由头文件和实现文件组成,这些文件被编译为构建框架本身。您可以使用Cocoa Touch类创建类。

验证您的构建设置转到项目目标的构建设置并确认或将“体系结构”设置为“标准体系结构”。这些是arm64和armv7,可能是默认设置。同样,我们还需要在设置中设置一些架构,因为iOS应用程序需要在许多不同的架构上运行。

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

这意味着构建速度尽可能快。当您归档应用程序或以发布模式构建时,Xcode将为所有ARM体系结构构建,从而允许该应用程序在大多数设备上运行。

Mach-O设置:静态库:

Final Build项目:

点击here(您有更多详情。)

使用lipo

聚合目标以组合设备和模拟器框架

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

点击here您已获得创建通用框架的步骤