将项目迁移到Xcode 4.2时,我遇到了一些Mach-O链接器未解析错误,例如_crc32、_expf和_UnwindSjLj_Register等问题。这个项目在Xcode 4.0.3中编译和链接都很好。我怀疑这可能是一个libz问题,因为我的上一个项目链接了libz.1.2.3.dylib。我删除了该引用,并添加了libz.1.2.5.dylib,在/Platforms/iPhoneOS.platform/DeviceSupport/5.0(9A5259f)/Symbols 1/usr/lib文件夹中找到。无论我是否包括libz.1.2.5.dylib,我都得到了相同的39个未解析引用,所以这看起来非常可疑。
libz.dylib
而不是libz.1.2.3.dylib
或libz.1.2.5.dylib
时,究竟发生了什么? - Hyperbolelibz.dylib
实际上是一个文件链接,指向其中一个版本化的 dylibs(通常是最新的)。但只有一个头文件版本,它与最新版本相同。所以,如果你今天尝试链接到(在 Xcode 中)1.2.3 版本,并且 SDK 更新了,包括 libz 更新到 1.3.0 并带有更新的头文件,你仍然会链接到旧版本(但如果你使用libz.dylib
,你将会链接到与头文件相同的版本)......嗯,大概就是这样,但每个库都可以有自己的要求。 - epatel