问题标签 [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 - 如何确定 NSObject 是否具有特定属性?
假设在 Apple API 1.0 版中,有一个 NSFoo 类,其属性为“color”。API 1.1 添加了属性“大小”。
我想知道我是否可以使用getter:myFoo.size
[myFoo respondsToSelector:@selector(getSize)] 没有按预期工作。
找出对象是否具有属性的正确方法是什么?谢谢!
c - 检查 C 中是否存在外部定义的标识符
我在开发 iOS 的 Objective-C 时遇到了这个问题,但这应该适用于使用 Mac OS X/iOS 链接器的任何 C/C++/Objective-C 代码。另一个问题涵盖了该解决方案,但我对为什么感兴趣。
假设我正在使用指向定义常量的库的链接。在头文件中有这样的声明:
我想编译我的应用程序并在具有早期版本库的系统上运行它,其中该常量没有定义,因此为了安全起见,我不认为它已被定义。
现在,如果有一个仅在最新版本的库中定义的函数,我可以这样做:
不包含函数代码的地址,而是BrandNewFunc
计算为 NULL。我认为常量的行为方式相同,但如果我尝试相同的模式,应用程序会在执行检查时死掉(在 iOS 上抛出 EXC_BAD_ACCESS)。具体来说:
取而代之的是检查标识符的地址:
我可以看到逻辑:BrandNewIdentifier
没有价值,所以访问它应该失败。但是,为什么该语法在 的情况下有效BrandNewFunc
?我不应该也需要检查它的地址吗?还是它实际上是一致的,并且我忽略了一些东西?
gcc - 覆盖动态库中的函数
您好,我有一个具有全局功能的程序,我想在运行时对其进行自定义。比如说,有许多版本的函数 foo() 分散在共享库中。现在,根据运行时检测到的系统配置,我想使用适当库中的函数。
文件加载器.cpp:
文件 other.cpp:
我用
但是,弱符号不会被覆盖。有什么提示吗?
macos - 运行时 API 可用性检查(弱链接)——10.5 上的错误行为
我在 10.6 上构建我的应用程序,但针对 10.5 进行部署。当程序将在 10.6 上运行时,我想利用服务管理 SMJobBless api,但在 10.5 上运行时,我显然仍需要使用特权安装工具。
我在我的可执行目标中弱链接到服务管理框架。我尝试了几种代码变体:
而且我什至尝试使用类似问题中列出的编译器标志。
在 10.6 上,printf("%p %d", SMJobBless, SMJobBless != NULL)
(正确地)为 SMJobBless 打印一个非空指针值,为非空打印 1。
当我将应用程序包复制到 10.5 时,它printf
告诉我 SMJobBless 为 0x0,但(错误地)为非空指针打印 1。
我让它工作的唯一方法是关闭所有优化并将函数指针分配给一个变量。
但我无法关闭生产代码的优化!
iphone - 弱链接基础和 UIKit?
我最近介绍了通过 AirPrint 打印,但不想放弃对 4.2 之前的版本的支持(显然)。之前为 Game Center 之类的东西做过。在这种情况下我发现特别奇怪的是我不得不弱链接 UIKit。打印不包含在它自己的框架中,这让我可以更细化。
这只是感觉不对,尽管它解决了我的问题,允许应用程序在所有版本上正常运行。
在Apple 的 SDK 兼容性指南中,他们指出:
当使用部署目标中可用的框架时,您应该需要该框架(而不是弱链接它)。
UIKit是可用的,但不是诸如UIPrintInfo
,之类的类UIPrintInteractionController
。
弱链接这样一个核心框架似乎很奇怪,我说得对吗?有没有更好的办法?
objective-c - 从 dlsym() 返回值的函数?
我敢肯定,愚蠢的问题是一些不正确的语法。如何让 dlsym 使用返回值的函数?我在以下代码中收到错误“void* 到 LSError (*)() 的无效转换” - 试图编译 linux lightscribe 示例程序,希望我可以将它与 OSX dylib 链接起来(为什么地狱赢了'HP 没有发布实际的 Cocoa SDK 吗?LS 只存在了 6 年还是 7 年?):
gcc - 使用弱符号时如何避免对 GLIBC_X.Y 的依赖
在 Hurd 中处理信号实现时,我遇到了以下问题。
基本上,我向 glibc 添加了一个新函数,该函数由 libpthread 使用(它们来自 Hurd 上的不同来源)。为了使新的 libpthread 仍然可以与旧的 glibc 一起使用,我将新函数声明为 libpthread 代码中的弱符号。(请参阅此处的补丁。)
当 libpthread 使用较旧的 glibc 构建时,一切都按原样运行。但是,当构建时在 glibc 中实际找到该符号时,链接器会发出一个与新符号版本相对应的“VERNEED”,并且使用旧 glibc 运行会导致:
其中 GLIBC_X.Y 是新引入符号的版本。
我正在寻找的结果是,当 glibc 没有新符号时,新符号为 NULL,这就是我使用旧 glibc 构建 libpthread 时发生的情况。
知道如何解决这个问题吗?链接 libpthread 时可以禁止符号的版本控制吗?
objective-c - 如何在 Xcode 4 上弱链接框架?
我需要将一些框架与我的目标弱链接。
但是我找不到怎么做...
如果我尝试在 3.2 iPad 模拟器上运行我的项目,我会收到以下错误:
谢谢 !
ios - 用于打印的弱链接框架
我有一个使用邮件和打印例程的简单项目。对于打印,我有一个 UIPrintPageRenderer 的子类。我正在遵循 Apple关于使用弱链接类的指南:
问题
我在应用程序启动时仍然收到错误:
当我尝试为 iPad 3.2 Simulator 运行我的应用程序时,我得到了这个。知道为什么吗?
ps 代码适用于 iPad 4.2 和 4.3。
iphone - 如果我弱链接我的应用程序中的所有框架会发生什么?
如果我弱链接我的应用程序中的所有框架会发生什么?会不会有什么不好的事情发生?