架构 i386 的未定义符号:“_deflate”,引用自 libMo.a 中的 PlatCompress(enumCompressOperation, CompressCookie*, void*,
Posted
技术标签:
【中文标题】架构 i386 的未定义符号:“_deflate”,引用自 libMo.a 中的 PlatCompress(enumCompressOperation, CompressCookie*, void*, long)【英文标题】:Undefined symbols for architecture i386: "_deflate", referenced from PlatCompress(enumCompressOperation, CompressCookie*, void*, long) in libMo.a 【发布时间】:2013-08-05 21:18:12 【问题描述】:我正在使用 SUP 做原生 ios 应用程序。根据文档;我已经包含了库并在 Xcode 中给出了链接路径。 构建时出现以下错误:
Undefined symbols for architecture i386:
"_deflate", referenced from:
PlatCompress(enumCompressOperation, CompressCookie*, void*, long) in libMo.a(tlplatcompress.o)
"_deflateEnd", referenced from:
PlatCompress(enumCompressOperation, CompressCookie*, void*, long) in libMo.a(tlplatcompress.o)
"_deflateInit_", referenced from:
StartCompression(enumCompressOperation, unsigned char, long (*)(void*, void*, long), void*, void**) in libMo.a(tlplatcompress.o)
"_deflateParams", referenced from:
StartCompression(enumCompressOperation, unsigned char, long (*)(void*, void*, long), void*, void**) in libMo.a(tlplatcompress.o)
"_inflate", referenced from:
PlatCompress(enumCompressOperation, CompressCookie*, void*, long) in libMo.a(tlplatcompress.o)
"_inflateEnd", referenced from:
PlatCompress(enumCompressOperation, CompressCookie*, void*, long) in libMo.a(tlplatcompress.o)
"_inflateInit_", referenced from:
StartCompression(enumCompressOperation, unsigned char, long (*)(void*, void*, long), void*, void**) in libMo.a(tlplatcompress.o)
ld: symbol(s) not found for architecture i386
clang: error: linker command failed with exit code 1 (use -v to see invocation)
请帮我解决这个错误。我是使用 SUP 进行原生 iOS 开发的新手。
谢谢。
【问题讨论】:
Error:Apple Mach-O Linker (Id) Warning的可能重复 从这里获得 sol(现在没有构建错误):***.com/questions/7752127/… 谢谢。 【参考方案1】:我也遇到了同样的错误。
将 libz.dylib 从目标添加到框架 -> 构建阶段选项卡 -> 将二进制文件与库链接,
希望对你有用。
注意:如果未找到 libz.dylib,请尝试添加 libz.tbd
【讨论】:
什么是 libz.dylib 以及它有什么作用? 在 Xcode7、iOS 9.1 上为我工作。我缺少的库是 libz.tbd 和 libsqlite3.tbd 没有 "libz.dylib" 但添加 libz.tbd 并且可以工作:) 感谢@Dhaval 的回答。您还可以帮我了解什么是 libz.tbd 以及它是如何解决这个问题的。 @GJDK libz 是一个用于压缩和解压缩功能的库。以上符号_deflate、_inflate等均来自该库。【参考方案2】:从 Xcode 7 开始,您应该这样做,而不是添加 libz.dylib:
转到项目Build Settings
选项卡
搜索Other Linker Flags
添加-lz
作为链接器标志(见屏幕截图)
在重新构建之前,在Product
菜单中选择Clean
【讨论】:
非常感谢,你救了我的命 :) 在 Xcode 8.2.1 中遇到同样的问题,用于在应用程序中添加自定义框架......请帮助 请说明为什么这样可以解决问题。 @ChuckKrutsinger 我知道ld
的手册解释了-l[x]
标志告诉链接器如何找到lib[x].dylib
(在本例中为libz.dylib)。比我更了解这个问题的人应该添加一个解释。在此处的其他答案不起作用后,我偶然发现了解决方案,并发布了我所做的。
对于 Xcode 9 仍然适用。使用标志或添加框架都可以。【参考方案3】:
架构 i386 的未定义符号:
"_deflate", referenced from:
PlatCompress(enumCompressOperation, CompressCookie*, void*, long) in libMo.a(tlplatcompress.o)
"_deflateEnd", referenced from:
PlatCompress(enumCompressOperation, CompressCookie*, void*, long) in libMo.a(tlplatcompress.o)
"_deflateInit_", referenced from:
StartCompression(enumCompressOperation, unsigned char, long (*)(void*, void*, long), void*, void**) in libMo.a(tlplatcompress.o)
"_deflateParams", referenced from:
StartCompression(enumCompressOperation, unsigned char, long (*)(void*, void*, long), void*, void**) in libMo.a(tlplatcompress.o)
"_inflate", referenced from:
PlatCompress(enumCompressOperation, CompressCookie*, void*, long) in libMo.a(tlplatcompress.o)
"_inflateEnd", referenced from:
PlatCompress(enumCompressOperation, CompressCookie*, void*, long) in libMo.a(tlplatcompress.o)
"_inflateInit_", referenced from:
StartCompression(enumCompressOperation, unsigned char, long (*)(void*, void*, long), void*, void**) in libMo.a(tlplatcompress.o)
ld: symbol(s) not found for architecture i386
clang: error: linker command failed with exit code 1 (use -v to see invocation)
我也有同样的问题,我认为你没有包含 libz.dylib 库。
这样做:
-
转到目标部分
构建阶段选项卡
将二进制文件与库链接
点击+按钮
搜索 libz.dylib
点击添加按钮。
【讨论】:
很好的回答。深层思想。谢谢【参考方案4】:1.转到目标部分
2.构建阶段选项卡
3.将二进制文件与库链接
4.点击+按钮
5.搜索 libz.tbd(或 libz.dylib)
6.点击添加按钮。
【讨论】:
你的答案与其他答案没有什么不同,那你为什么要发布它? 我所做的唯一区别是“5.search libz.tbd(或 libz.dylib)”我认为 libz.tbd 是 libz.dylib 的新名称以上是关于架构 i386 的未定义符号:“_deflate”,引用自 libMo.a 中的 PlatCompress(enumCompressOperation, CompressCookie*, void*,的主要内容,如果未能解决你的问题,请参考以下文章
架构 i386 的未定义符号:“_SCNetworkReachabilitySetCallback”