我一直在创建 Cocoa Touch 框架
收到这个错误
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 Libraries 和 Embedded 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/