问题标签 [weak-linking]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
494 浏览

objective-c - Objective-C 检查结构是否被定义

我的 iOS 应用程序可以使用可选的外部 3rd 方库。

我想过使用这个答案(弱链接 - 检查一个类是否存在并使用该类)并在执行特定于该库的代码之前检测该类是否存在。

但是,我发现这个外部库不是写成 Objective-C 类,而是写成 C STRUTS 和函数。

是否有类似的技术可以让我检查 C Strut 或函数是否存在?或者一些更好的选择来查看这个库在运行时是否存在?

0 投票
1 回答
194 浏览

ios - 只有弱链接部署目标中不可用的框架?

在我的应用程序中,大多数框架都是弱链接的。当我阅读文档时,我认为也许我不需要弱链接这些框架。

我的应用程序的设置

我的应用部署目标是 iOS4.3,基础 SDK 是 iOS7.1。

我的想法

在我的应用程序中,我使用CIImageand UICollectionViewCIImageCoreImageiOS5.0之后可用的框架中,所以我应该弱链接CoreImage框架。UICollectionViewUIKit框架在iOS6.0中可以使用,但是在iOS4.3中可以使用UIKit,所以我不需要弱链接UIKit框架。

我对吗 ?

0 投票
2 回答
3799 浏览

ios - iOS 框架弱链接:未定义符号错误

我正在构建自己的框架,建议将其分发给其他开发人员,以包括他们的项目。该框架可选地链接某些框架(例如CoreLocation)。问题是,当我将我的框架链接到构建阶段中不包含 CoreLocation 的真实独立项目时,我在尝试构建此主机项目时遇到链接器错误,例如“架构的未定义符号”

是否可以避免这种情况,因为我不想强迫开发人员将 CoreLocation 包含在他们的项目中?实际上,我知道这是可能的,但我应该怎么做才能做到这一点?

0 投票
1 回答
210 浏览

ios - Xcode中的弱链接类

我的项目有一个 Objective-C 类MockupModel,它为 iOS Xcode 项目提供模型信息,以帮助为 App Store 创建屏幕截图。

该项目有两个目标。样机目标包括MockupModel.m.

我希望包括主要目标(对于实际应用程序),MockupModel.m以免它意外链接到运输应用程序。

但是,当我使用文件的属性检查器从项目中排除时MockupModel.m,足够合理,项目无法链接。我收到一个错误,抱怨MockupModel缺少 的功能。

有什么方法可以声明MockupModel为可选,这样链接器就不用担心它是否没有实现?在运行时,我的代码将检查它是否可以与NSClassFromString(@"MockupModel")或 一起使用[MockupModel class]

0 投票
1 回答
1544 浏览

c++ - 如何*防止* Visual-C++ 中静态库符号的“弱”链接?

就我的实际测试而言,当在 Visual-C++.lib中将静态库 .

确认(2010 年 2 月 18 日 17:46 Michael Burr)

MSVC 过去的行为是,如果在 .obj 文件和 .lib 中定义符号,它将使用 .obj 文件中的符号而不会发出警告。我记得它还可以处理符号在多个库中定义的情况,它将使用库中列表中第一个命名的库。

我不能说我已经尝试过一段时间了,但是如果他们改变了这种行为(尤其是 .obj 定义的符号会覆盖 .lib 文件中的符号),我会感到惊讶。

使用 VS 2010 RC 进行的简短测试表明我描述的行为仍然存在。

“具有默认功能的 Windows 静态库”对我来说似乎也是一种确认)


现在首先,我很想被证明是错误的,但至少对于一个常规的 C++ 函数来说,这似乎是这样的。

其次,有什么办法可以防止这种情况发生吗?我有一个函数,当任何二进制链接到包含此函数的静态库时,我想确认实际使用了静态库中的版本而不是其他项目中的一些剩余内容或其他任何内容。(请注意:有问题的 Fn 是test_suite* init_unit_test_suite(int argc, char* argv[]), (*) 所以我实际上无法更改它,因为它来自第三方库。)


(*):这是 Boost.Test 主函数,应该由我们的自定义静态库提供。如果任何开发人员创建了一个单元测试项目——它通过属性表自动链接到静态库——但也错误地定义了函数,则构建应该中断,而不是使用开发人员提供的函数。

0 投票
2 回答
3049 浏览

ios - 如何使用弱链接的 CocoaPods 库构建 iOS 框架

我正在尝试使用 Xcode 6 提供的用于创建 Cocoa Touch 框架的新模板来构建 iOS 框架(Test.framework)。该框架具有在 Podfile 中指定的不同依赖项(如 AFNetworking 或 FacebookSDK)。我不希望将依赖项包含在框架中,我只想链接它们。

问题是当我构建框架时,libPods.a 被链接并包含在内。 问:如何链接 libPods.a 库,但不将其包含在框架中?


更多细节:

我已阅读有关弱链接的信息: https ://developer.apple.com/library/ios/documentation/MacOSX/Conceptual/BPFrameworks/Concepts/WeakLinking.html 但我没有太多使用项目设置的经验,我我不是专业人士。

我尝试将 libPods.a 标记为“可选”,但没有任何改变,依赖项仍然包括在内。

我尝试从 Build Phases 中的“Link Binary With Libraries”部分中删除 libPods.a,但出现此错误(在清理项目文件夹并再次构建之后):

我尝试从“其他链接器标志”中删除所有标志,但它给了我未定义的符号:

这是包含库的干净项目的源代码: https ://www.dropbox.com/sh/0ymuzw6kiagz02j/AABzyHiZVaQQvBEnjBgRBq3ua?dl=0

0 投票
2 回答
1212 浏览

android - Android 是否支持弱符号?

我一直在研究以下问题:

在我看来,这可以用弱符号来解决。也就是说,本机组件可以提供类似的符号,rand但用__attribute__((weak)). 如果在另一个库中找到该符号,例如标准运行时,则不会使用弱链接符号。另一方面,如果缺少符号,则将使用本机组件的版本。

我无法在其上查找适用于 Android 的信息(搜索时出现太多不相关的噪音)。

我打开了我的 Crypto++/JNI 示例项目之一,并将以下内容添加到 CPP 文件中。这AutoSeededRandomPool只是一个 Crypto++ 随机数生成器对象(下面没有什么特别或棘手的)。

尝试编译它会导致redefinition of int rand(). 我还尝试了以下方法:

移动int rand(void) __attribute__((weak));到 H 文件会产生相同的redefinition of int rand().

而且我没有收到任何关于未知属性的错误或警告。

我还看到在预处理器__GXX_WEAK__中定义为,1未定义,因此它的混合信号(可能是一个错误,类似于使用 -fno-weak 时将GXX_WEAK定义为 0 )。SUPPORTS_WEAK

我不确定我是否做错了什么,或者在 c++ 代码中遇到了 const 和 weak 属性之类的东西,或者其他的东西。

Android 是否支持弱符号?如果是这样,如何使用它们。


这是一个没有答案的类似 Stack Overflow 问题:


一些系统细节:

  • 基本系统是 Mac OS X 10.8.5,已完全修补
  • Eclipse 4.4.1 (Luna),完全修补
  • Android NDK 修订版 10d
  • GCC 4.9 交叉编译器
0 投票
0 回答
90 浏览

objective-c - 弱链接?外班?那可能吗

我在这个问题上纠结了几天。

问题是我们在内部使用可可豆荚时构建了 SDK。结果将是一个带有公共标头的闭源胖库。其中一个 pod 是 AFNetworking。IMO 我们不应该将 AFNetworking(和其他 pod)包含在库中,原因如下:

  • 如果 SDK 用户还添加了它自己的 AFNetworking,我们不希望有冲突/重复符号
  • 我们不希望因为 AFNetworking 更新(例如由于安全性增强)而被迫不断更新我们的框架,这会乘以我们使用的每个其他 pod

所以我们要做的是提供一个封闭源代码 SDK,其中包含用户需要提供它自己的 AFNetworking 副本的说明(可能带有注释中的推荐版本)。那可能吗?

0 投票
2 回答
1775 浏览

ld - Xcode 7:-weak_library 和 -bitcode_bundle 不能一起使用

使用 Xcode7 部署到 iPhone 和 Apple Watch 时,出现以下错误:

ld: -weak_library 和 -bitcode_bundle (Xcode 设置 ENABLE_BITCODE=YES) 不能一起使用

想请问如何最好地解决这个问题?

跟进:Apple Watch 需要启用位码的库,基于iOS 9 中的新警告-> 我们可能必须为所有库启用位码..

0 投票
0 回答
217 浏览

ios - dylibs 中的弱符号和 ios 和 osx 上的动态绑定

我最近被一些奇怪的行为击中,导致我把头发扯掉了一点。我想我终于解决了问题并理解了原因,但希望对我的结论进行健全性检查。为了简单起见,我将跳过这个问题,只是陈述我的断言(背景故事冗长乏味)。

所有这些都发生在 OSX 和 iOS 模拟器上(我想在设备上也是如此,但我还没有测试过)。

  • dylib A:导出功能foo标记为弱。
  • foo dylib B:未标记为弱的导出功能。
  • 应用程序 X:链接到 dylib A。

应用程序运行(自动加载 dylib A)并调用foo. A::foo(请原谅符号滥用)被调用。然后应用程序加载 dylib B。 的符号foo被反弹到B::foo。随后调用fooalways call B::foo,而且foo永远不会反弹,因为 dylib B 定义foo为强。

正确的?

在我写这篇文章时,从逻辑上讲,我只能得出结论,它必须是(事实上我已经用一个例子验证了这种行为)。该行为实际上与静态链接期间发生的行为相同。令我惊讶的是,动态重新绑定实际上可能会发生,正如您可以想象的那样,如果函数可以在执行过程中部分更改实现,它可能会导致一些奇怪的行为。

operator new注意我在 dylib 中重写时遇到了这个问题。由于 libc++(隐式)导出operator new为弱,因此出现了上述情况。

据推测,如果你使用弱动态符号,那么你必须非常确定你知道你在做什么:)