问题标签 [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.
objective-c - Objective-C 检查结构是否被定义
我的 iOS 应用程序可以使用可选的外部 3rd 方库。
我想过使用这个答案(弱链接 - 检查一个类是否存在并使用该类)并在执行特定于该库的代码之前检测该类是否存在。
但是,我发现这个外部库不是写成 Objective-C 类,而是写成 C STRUTS 和函数。
是否有类似的技术可以让我检查 C Strut 或函数是否存在?或者一些更好的选择来查看这个库在运行时是否存在?
ios - 只有弱链接部署目标中不可用的框架?
在我的应用程序中,大多数框架都是弱链接的。当我阅读文档时,我认为也许我不需要弱链接这些框架。
我的应用程序的设置
我的应用部署目标是 iOS4.3,基础 SDK 是 iOS7.1。
我的想法
在我的应用程序中,我使用CIImage
and UICollectionView
。CIImage
在CoreImage
iOS5.0之后可用的框架中,所以我应该弱链接CoreImage
框架。UICollectionView
UIKit框架在iOS6.0中可以使用,但是在iOS4.3中可以使用UIKit,所以我不需要弱链接UIKit
框架。
我对吗 ?
ios - iOS 框架弱链接:未定义符号错误
我正在构建自己的框架,建议将其分发给其他开发人员,以包括他们的项目。该框架可选地链接某些框架(例如CoreLocation)。问题是,当我将我的框架链接到构建阶段中不包含 CoreLocation 的真实独立项目时,我在尝试构建此主机项目时遇到链接器错误,例如“架构的未定义符号”
是否可以避免这种情况,因为我不想强迫开发人员将 CoreLocation 包含在他们的项目中?实际上,我知道这是可能的,但我应该怎么做才能做到这一点?
ios - Xcode中的弱链接类
我的项目有一个 Objective-C 类MockupModel
,它为 iOS Xcode 项目提供模型信息,以帮助为 App Store 创建屏幕截图。
该项目有两个目标。样机目标包括MockupModel.m
.
我希望不包括主要目标(对于实际应用程序),MockupModel.m
以免它意外链接到运输应用程序。
但是,当我使用文件的属性检查器从项目中排除时MockupModel.m
,足够合理,项目无法链接。我收到一个错误,抱怨MockupModel
缺少 的功能。
有什么方法可以声明MockupModel
为可选,这样链接器就不用担心它是否没有实现?在运行时,我的代码将检查它是否可以与NSClassFromString(@"MockupModel")
或 一起使用[MockupModel class]
。
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 主函数,应该由我们的自定义静态库提供。如果任何开发人员创建了一个单元测试项目——它通过属性表自动链接到静态库——但也错误地定义了函数,则构建应该中断,而不是使用开发人员提供的函数。
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
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 交叉编译器
objective-c - 弱链接?外班?那可能吗
我在这个问题上纠结了几天。
问题是我们在内部使用可可豆荚时构建了 SDK。结果将是一个带有公共标头的闭源胖库。其中一个 pod 是 AFNetworking。IMO 我们不应该将 AFNetworking(和其他 pod)包含在库中,原因如下:
- 如果 SDK 用户还添加了它自己的 AFNetworking,我们不希望有冲突/重复符号
- 我们不希望因为 AFNetworking 更新(例如由于安全性增强)而被迫不断更新我们的框架,这会乘以我们使用的每个其他 pod
所以我们要做的是提供一个封闭源代码 SDK,其中包含用户需要提供它自己的 AFNetworking 副本的说明(可能带有注释中的推荐版本)。那可能吗?
ld - Xcode 7:-weak_library 和 -bitcode_bundle 不能一起使用
使用 Xcode7 部署到 iPhone 和 Apple Watch 时,出现以下错误:
ld: -weak_library 和 -bitcode_bundle (Xcode 设置 ENABLE_BITCODE=YES) 不能一起使用
想请问如何最好地解决这个问题?
跟进:Apple Watch 需要启用位码的库,基于iOS 9 中的新警告-> 我们可能必须为所有库启用位码..
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
。随后调用foo
always call B::foo
,而且foo
永远不会反弹,因为 dylib B 定义foo
为强。
正确的?
在我写这篇文章时,从逻辑上讲,我只能得出结论,它必须是(事实上我已经用一个例子验证了这种行为)。该行为实际上与静态链接期间发生的行为相同。令我惊讶的是,动态重新绑定实际上可能会发生,正如您可以想象的那样,如果函数可以在执行过程中部分更改实现,它可能会导致一些奇怪的行为。
operator new
注意我在 dylib 中重写时遇到了这个问题。由于 libc++(隐式)导出operator new
为弱,因此出现了上述情况。
据推测,如果你使用弱动态符号,那么你必须非常确定你知道你在做什么:)