Tag: 链接器

处理iOS Framework项目的依赖关系

我已经使用这个方法创build了iOS Framework项目: https : //github.com/jverkoey/iOS-Framework 工作很整洁,但我有点困惑,如何包括我的框架工作所需的库/框架,特别是如何做到这一点,以防万一使用我的框架的第三方客户端应用程序可以包括这些库也没有冲突。 假设我的框架代码需要这两件事情: FacebookSDK.framework libFlurry.a 第一个是iOS框架。 当我把它添加到我的框架中的“链接二进制库”阶段,并尝试编译使用我的框架的客户端项目链接器抱怨丢失的符号 – 我需要添加FacebookSDK到客户端项目这是伟大的:如果客户端应用程序想使用Facebook冲突。 但是,当我做同样的Flurry静态库时,编译客户端项目时,我得到重复的符号错误。 这让我困惑了一下,因为不是FacebookSDK.framework只是一个打包的静态库? ukaszs-iMac:FacebookSDK.framework lukasz$ file Versions/A/FacebookSDK Versions/A/FacebookSDK: Mach-O universal binary with 3 architectures Versions/A/FacebookSDK (for architecture i386): current ar archive random library Versions/A/FacebookSDK (for architecture armv7): current ar archive random library Versions/A/FacebookSDK (for architecture cputype (12) cpusubtype (11)): current ar archive random […]

在XCode 7.1的UItesting中访问应用程序模块时链接器错误

我正在尝试在我的项目中执行一些uitesting。 一切都很顺利,只要我保持简单:loggingtesting用例,添加一些断言,然后运行testing。 这工作正常,但是当我尝试从我的testing中访问应用程序模块时,链接器会引发错误(请参见下文): 在应用程序源文件中: func foo() { assert(true) } 在UItesting中: import XCTest @testable import MyApp func testExample() { foo() } 错误: 未定义的符号架构i386:“MyApp.foo() – >()”,引用自:MyAppUITests.MyAppUITests.testExample(MyAppUITests.MyAppUITests)() – >()in MyAppUITests.o ld:symbol(s)not found for架构i386铛:错误:链接器命令失败,退出代码1(使用-v来查看调用) 架构x86_64的未定义符号:MyAppUITests.MyAppUITests(MyAppUITests.MyAppUITests)() – >()in MyAppUITests.o中引用的“MyApp.foo() – >()”,ld:symbol(s)not found for架构x86_64 我有类似的问题报告在这里: https : //forums.developer.apple.com/thread/20609但没有解决scheme。 对我来说就像@testable根本无法正常工作。 在developer.apple.com上的人尝试通过在设置中添加testing主机和Bundle Loader来解决这个问题,但是我不认为这是正确的方法。 我认为@可@testable应该使所有的工作,现在看起来不像。 任何帮助感激!

弱链接iPhone应用程序的多个框架(-weak_framework)

如何在为旧版部署目标编译iPhone应用程序时为多个框架指定-weak_framework?

查找iOS上每个外部库所贡献的大小

我试图减less我的应用程序商店二进制大小,我们有很多外部库可能是最后的IPA的大小作出贡献。 有没有什么办法来找出每个外部静态库在最终的二进制文件中占多less(除了去除每个静态库?)?

如何解决与OpenCV的iOS链接错误

我试图添加最新版本的openCV到我的iOS项目,但是当我编译时,我得到了大约30个链接错误: 例: Undefined symbols for architecture i386: "cv::merge(std::vector<cv::Mat, std::allocator<cv::Mat> > const&, cv::_OutputArray const&)", referenced from: 我在一个带有简单video捕捉的虚拟应用程序中添加了OpenCV框架以及所有其他必需的框架 (按照链接中的教程),并且完美地工作。 我不确定为什么它能在一个地方如此顺利地工作,而不是在另一个地方。 我唯一的想法是,我是编译两个应用程序之间的不同架构,但我认为我都瞄准了armv7和armv7s。 任何想法可能会导致链接错误?

Swift框架不包括通用结构扩展的符号

我无法链接我的框架与利用该框架的代码。 具体而言,链接程序无法findgenerics结构的扩展符号。 这是可选的扩展之一: extension Optional { /// Unwrap the value returning 'defaultValue' if the value is currently nil func or(defaultValue: T) -> T { switch(self) { case .None: return defaultValue case .Some(let value): return value } } } 如果在应用程序的主要部分编译代码,此方法在游乐场或应用程序中效果很好。 但是,当我尝试将其编译为框架时,应用程序(甚至框架的testing)产生以下链接器错误: 架构i386的未定义符号:“__TFSq2orU__fGSqQ__FQQ”,引用来自:__TFC18SwiftPlusPlusTests27Optional_SwiftPlusPlusTests13testOrWithNilfS0_FT_T_可选+ SwiftPlusPlusTests.o 类似的方法,如下面的,链接罚款(注意,它不是一个通用的) extension String { /// Returns a string by repeating it 'times' times […]

可以将-ObjC标志select性地应用于静态库吗?

TL; DR 我怎样才能使-ObjC链接器标志目标特定的静态库,而不是所有的静态库我链接,以避免未使用的目标文件被链接到我的应用程序? 太长; 阅读 所以你正在开发一个新的iOS应用程序,并且添加了你自己制作的“objcutil”静态库,它包含了各种有用的Objective-C类(没有被实现为类)来完成过去有用的各种事情。 到目前为止,这么好,只有实用程序库中引用的对象文件正在与应用程序链接。 然后,您决定集成Google Maps SDK ,希望您使用-ObjC Other Linker Flags,并且实用程序库中的所有突然依赖项都无法parsing,因为您尚未将Xcodeconfiguration为链接到这些库。 好的,我可以很容易地解决缺less的依赖关系,但是现在您已经有了不需要的不需要的对象文件和库依赖关系,而且您想要比这更有点整齐。 那么如何避免OCD超负荷? 从ld页的一些参考: -ObjC加载定义Objective C类或类别的静态归档库的所有成员。 该选项不适用于dynamic共享库。 Xcode版本:5.1.1 OSX版本:10.9.4

苹果Mach-O链接器(id)警告:为MacOSX构build,但链接到为iOS构build的dylib

从过去xCode 4的某个时刻开始抱怨链接器问题: ld:警告:为MacOSX构build,但链接到为iOS构build的dylib:/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator5.0.sdk/System/Library/Frameworks//CoreGraphics.framework/CoreGraphics 我已经检查了一切,但仍然没有任何可疑的configuration,它编译和运行。 我唯一看到的是CoreGraphics.framework之前的双斜杠,为什么我不知道。 尝试删除并再次添加库“build设阶段”,没有帮助。

我如何在Swift中做弱链接?

在Objective-C中,如果我想要使用一个只存在于新版iOS中的特定类,我会这样做: if( [UIBlurEffect class] ) { // do something with UIBlurEffect } else { // gracefully fallback to old behavior } 不过,相当于Swift: if UIBlurEffect.self != nil { let blur: UIBlurEffect = UIBlurEffect(…) // … else { // … } // also occurs with NSClassFromString("UIBlurEffect") 不具有相同的function。 如果在NSNewFeature可用的环境中运行,一切都很好。 但是如果这个类没有被定义,那么在启动应用程序时就会出现链接错误: dyld: Symbol not found: _OBJC_CLASS_$_UIBlurEffect 那么如何在Swift中做弱链接呢? 编辑添加UIBlurEffect作为具体的例子。

Xcode – 获取force_load使用相对path

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