Tag: 静态库

在Objective-C中运行时检测并使用可选的外部C库

我正在构build一个iPhone开发人员可以在他们的项目中包含的SDK。 它以编译的“.a”forms提供,没有源代码。 我们打电话给我的SDK“AAA”。 他的项目中的客户(我们称之为“BBB”)除了使用AAA之外,还可能使用称为“CCC”的第三方库,该库也是预编译的,是闭源的。 我不卖CCC,这是一个不同的公司。 我的SDK(AAA)可以select使用CCC来改进产品,使用这些第三方function。 例如,让我们说CCC是一个安全的SDK来encryption的东西。 AAA不需要CCC,但如果客户select将CCC纳入其项目中,AAA也将更安全。 现在这里是一个额外的棘手的部分 – CCC库,纯C代码,由C结构和C函数 – 没有任何面向对象。 问题是: 我如何编译我的AAA SDK以使用CCC中的函数/结构体,而不在我的项目中包含CCC(未经法律允许,并且不希望跟上版本更新)。 我如何检测客户是否在他的项目中有CCC,只有在可用时才使用这些额外function?

带有静态库的iOS应用程序总是在启动Ad Hoc Archive Build时崩溃。 无法在Xcodedebugging器中重现

我们有一个使用静态库构build的应用程序,我们也在为分发而构build。 App和Lib在Xcodedebugging器中运行正常,或者通过Xcodedebugging会话在设备上加载。 一旦我们把设备上的Ad Hoc Archive构build起来,应用程序总是崩溃。 控制台日志语句表明它在Lib代码中崩溃,但崩溃报告不符号化Lib代码。 无法在Xcode模拟器中重现。 Guard malloc,Guard Edge不显示任何东西(但是这些只能在模拟器中运行)。 没有泄漏 使用Xcode 4.3.2 应用目标4.3或更高版本。 Lib目标3.0或更高版本。 其他链接器标志= -ObjC 在目标“与库链接二进制文件”中将Lib设置为“可选” 拇指支持closures(使用LLVM) 在控制台上看到2个可能有用的例外,但是到目前为止,还没有在networking上做出任何有助于这个事情的东西: Application 'x' exited abnormally with signal 12: Bad system call: 12 (mostly) Application 'x' exited abnormally with signal 12: Bad system call: 11 (rarely) 我们看到其他地方的评论说,recursion静态库有问题。 但是我们的Lib没有任何recursion。 难住,需要更多的想法。

使用Cocoapods构build静态库时,防止出现重复的符号

虽然我已经看到了许多与Cocoapods和静态库有关的问题,但是他们中的大多数人似乎都认为你最终将拥有一个单独的工作空间与静态库和最终目标应用程序。 在我的情况下,我正在build立一个静态库。 更具体地说,我正在窃听一个MyLib.framework供用户使用。 我真的想用Cocoapodspipe理MyLib.framework的依赖关系,但是当我的库的使用者也使用Cocoapods时,它创造了许多痛点。 例如,我的图书馆有我用Cocoapodspipe理的AFNetworking依赖项。 当我build立我的图书馆,它链接在libPods.a其中包括AFNetworking,以及一些“虚拟”文件/对象。 如果我的框架的用户也使用Cocoapods来构build他们的应用程序,他们会看到如下所示: duplicate symbol _OBJC_METACLASS_$_PodsDummy_Pods in: /Users/erikkerber/Dropbox/Projects/MillMain/MyLib.framework/BuddySDK(Pods-dummy.o) /Users/erikkerber/Library/Developer/Xcode/DerivedData/MillMain-fngfqhlslygksgcfuciznkpqfrbr/Build/Products/Debug-iphonesimulator/libPods.a(Pods-dummy.o) duplicate symbol _OBJC_CLASS_$_PodsDummy_Pods in: /Users/erikkerber/Dropbox/Projects/MillMain/MyLib.framework/BuddySDK(Pods-dummy.o) /Users/erikkerber/Library/Developer/Xcode/DerivedData/MillMain-fngfqhlslygksgcfuciznkpqfrbr/Build/Products/Debug-iphonesimulator/libPods.a(Pods-dummy.o) ld: 2 duplicate symbols for architecture i386 我想如果他们要添加一个AFNetworking依赖关系,他们也会得到与AFNetworking相关的重复符号。 我打算最终分发MyLib与Cocoapods,但我也希望能够分发一个MyLib.framework本身。 有没有办法使Cocoapods与我的图书馆,同时使Cocoapods安全的任何潜在的用户?

Xcode – 找不到架构x86_64(iOS Lib)的符号

我正在build立一个静态库。 构build设置的体系结构设置为: $(ARCHS_STANDARD) ,显示为Standard Architectures (armv7, armv7s, arm64)我构build的libselectiOS设备,然后使用模拟器(例如iPhone视网膜)。 现在我有两个版本(一个在Debug-iphoneos ,另一个在Debug-iphonesimulator ,我使用lipo -create Debug-iphonesimulator来创build聚集的lib: lipo -create path/to/first/lib /path/to/second/lib -o MyLib.a 如果我在另一个项目中使用这个库在任何具有64位体系结构的iOS设备上进行模拟,那么它将给symbol(s) not found for architecture x86_64 。 真正让我如此生气的是,lib项目本身在另一个使用lib的项目的工作区内。 我可以在64位iOS模拟器上模拟! (在所有的模拟器和设备上)。 我究竟做错了什么? 笔记: 这是不重复的Q.在指责我之前(因为这是我第二天试图解决这个愚蠢的问题),我search了Stack和Google。 所有的答案都没有帮助。 我正在使用Xcode 5.1.1。

Xcode – 获取force_load使用相对path

链接到Xcode项目时,某些库需要-all_load链接器标志。 但是,如果库之间存在符号冲突,则会导致链接器错误。 解决scheme是使用-force_load,它可以有效地让你在某些库上使用-all_load,但是在其他库上则不能。 但是,这反过来会导致一个新的问题,至less对我而言。 每当我使用-force_load和一个库的相对path时,链接器总是发现库和它本身之间的符号冲突。 看来链接器认为图书馆的绝对path和图书馆的相对path是不同的图书馆,因此发现图书馆与自身之间存在冲突。 我可以通过使用带有标志的绝对path来避免这种情况。 但这不是一个好的解决scheme,因为在我的文档目录中保存库的源代码很方便。 但是其他机器上的文档目录的path是不同的。 问:任何人都可以得到force_load与库的相对path? 编辑:对于背景信息,看到这个问题