Tag: 静态链接

Xcode多个静态库和重复的符号

我正在开发一个依赖两个静态实用程序库(libBFSDK&libBetfair-Platform)的iPad应用程序。 这两个静态库都包含AFNetworking。 当我尝试在我的iPad应用程序中包含这两个静态库时,出现如下链接错误: duplicate symbol _OBJC_METACLASS_$_AFImageCache in: /Users/osheas/Library/Developer/Xcode/DerivedData/Betfair-gnnjnwtovdmtoxakuxbjyvetciyy/Build/Products/Debug-iphonesimulator/libBFSDK.a(UIImageView+AFNetworking.o) /Users/osheas/Library/Developer/Xcode/DerivedData/Betfair-gnnjnwtovdmtoxakuxbjyvetciyy/Build/Products/Debug-iphonesimulator/libBetfair-Platform.a(UIImageView+AFNetworking.o) ld: 86 duplicate symbols for architecture i386 clang: error: linker command failed with exit code 1 (use -v to see invocation) UIImageView + AFNetworking是AFNetworking的一部分。 这两个静态库都包含AFNetworking。 因此,我得到了UIImageView + AFNetworking的重复符号。 任何人有一个解决这个问题的想法? 我有权访问两个静态库的源代码,但我仍然不知道如何解决这个问题。 谢谢,请让我知道如果你需要任何其他细节, 肖恩 PS – FWIW我正在运行Xcode 4.5,我需要能够部署到iOS 4.x设备。

如何将LC_LOAD_DYLIB命令插入Mach-O二进制文件或将静态库连接到现有的二进制文件(IOS)

这是我第一次问stackoverflow和我绝望。 我的任务是加载一个dylib或join一个静态库到IOS设备已经存在的可执行文件。 我将使用static void __attribute__((constructor)) initialize(void)开始搅拌。 这个可执行文件是在内部企业appstore,所以我不需要通过苹果appstore(因为他们会拒绝它)。 这样做的原因是从客户那里获取现有的IPA及其签名密钥,并为其应用程序添加新function,而无需开发人员的干预。 有一家公司叫做nukona。 您可以在这里观看电影: https : //www.youtube.com/watch?feature=player_embedded&v=z9rrOB6lOxY 我可以告诉你,我试图把LSEnvironment放在带有DYLD_INSERT_LIBRARIES的plist文件中,但是事实certificateLSEnvironment在IOS应用程序的沙盒中似乎没有任何作用。 我也尝试了install_name_tool来更改其中一个依赖关系,并用我的dylib(也有这个依赖关系)replace它。 它崩溃,没有信息为什么。 很明显,如果我将dylib添加到XCode中的testing应用程序,并重新编译,它是完美的,这是一个给定的。 但是,这是我不能问的,例如,一个公司的pipe理员。 重build可能会阻止客户使用这个库。 这里是一个相关的链接,我发现堆栈溢出,但对于OSX,我需要它的IOS。 如何将LC_LOAD_DYLIB命令插入Mach-O二进制文件(OSX) 我唯一能想到的是编辑二进制加载命令一些如何,但我不知道如何以及如何做到这一点考虑到搬迁表等… 任何替代scheme是值得欢迎 感谢您的时间。

XCode中的条件链接静态库与环境variables

我想链接一个静态库( .a文件)到我的代码有一些限制 条件应该是一个环境variables而不是构buildtypes(Debug,Release)或体系结构。 如果没有使用静态库(没有导入,没有在代码中使用),那么最终的二进制文件根本不应该包含任何引用。 代码应该如下所示: #ifdef CRASH_LOGGING [Crittercism enableWithAppID:@"abc"] #endif 环境variables应该有一个相似的名字。 我玩的是OTHER_LINKER_FLAGS = -weak_library ,从目标中移除.a ,将其设置为可选,但是我无法使其工作。 无论是没有链接的库,我得到一个编译错误,或部分.a属于最终的可执行文件。 我怎样才能做到这一点?

在静态iOS库中重写符号

我正在处理一个链接几个静态库的iOS应用程序。 挑战在于,那些链接的库定义了不同的实现方法的相同的方法名称。 奇怪的是,我没有得到任何duplicate symbol definition错误; 但毫不奇怪,我最终只能访问该方法的一个实现。 更清楚的说,我有libA和libB,他们都定义了一个全局的C方法func1() 当我连接libA和libB,并调用func1()时,它parsing为libA或libB的实现,没有任何编译警告。 然而,我需要能够分别访问libA的func1()和libB的func1()。 有一个类似的SOpost ,解释如何在C(通过符号重命名),但不幸的是,因为我发现, objcopy工具不适用于ARM体系结构(因此iPhone)。 (我将把它提交给App Store,因此,dynamic链接不是一个选项)

iOS是一个静态或dynamic的框架?

这可能听起来像一个愚蠢的问题,但如果你有一个thirdParty.framework文件,你可以告诉它是静态的还是dynamic的? 我的意思是,如果你看里面,他们看起来不一样吗?