【发布时间】:2013-09-24 11:53:19
【问题描述】:
在使用 iOS 7 SDK 时,由于 libxml2 中的更改,我不得不更改库的一行以使用新的输出缓冲区访问器方法用于 xmloutput 缓冲区。
NSData * result = [[[NSData alloc] initWithBytes:outputBuffer->buffer->content
length:outputBuffer->buffer->use] autorelease];
导致编译错误“struct_xmlBuf 类型的定义不完整”。使用新的访问器方法变成:
NSData * result = [[NSData alloc] initWithBytes:xmlOutputBufferGetContent(outputBuffer)
length:xmlOutputBufferGetSize(outputBuffer)];
这工作正常,但是当在 iOS 6 上运行时,对于提到 libxml2.2.dylib 的新方法,它会因“惰性符号绑定失败:未找到符号”而崩溃,这并不奇怪。
您如何有条件地进行此更改,以使用基本 SDK iOS 7 进行编译并仍可在 iOS 5、6 和 7 上运行?
注意:像其他问题一样,通常在运行时检查 iOS 版本是不够的,因为旧行不再编译。
我一直在尝试和考虑:
- 检查
xmlOutputBufferGetContent != NULL,始终正确 - 使用 libxml2.2 代替 libxml2
- 检查
LIBXML_DOTTED_VERSION,总是2.9.0 - 检查
LIBXML2_NEW_BUFFER定义的新方法,始终正确
所有这些都导致在编译之前或之后总是只选择一行,主要基于 SDK。在非 iOS 项目(谷歌搜索)中处理这一变化的其他少数人似乎总是针对一个版本的 libxml 进行编译。
【问题讨论】:
标签: ios objective-c ios7 libxml2