问题标签 [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 回答
629 浏览

objective-c - 在 iPhone 模拟器上运行时检测 UIPopoverController 类可用性的问题

我在一个通用应用程序上工作,它使用 UIPopoverController 的 iPad 版本。(基础 SDK 和部署目标都是 iOS 4.3)

当我使用 iPhone 模拟器(4.3 版)测试 iPad 和 iPhone 的条件代码路径时,弱链接和NSClassFromString(@"UIPopoverController")方法都没有给出预期的行为。

在测试 UIKit 框架的弱链接时,我确保使用 LLVM 2.1 编译器并在“Target->Build Phases->Link Binary with Libraries”中将 UIKit 框架设为“可选”。(据我了解是在 Xcode 4.1 中执行此操作的方法)。

运行代码

iPhone 模拟器上的应用程序崩溃,表明[UIPopoverController class]不返回nil. [UIPopoverController class]用上面的替换NSClassFromString(@"UIPopoverController"),会导致同样的崩溃。

有谁知道在模拟器上运行时如何使这些条件检查工作?

0 投票
1 回答
267 浏览

iphone - 设置较低的部署目标时无法编译包含 iOS 5 方法的代码

并非所有新的 iOS 5 方法都是如此,但我发现setBackgroundImage:forBarMetrics:如果部署目标低于 5.0,调用 UINavigationBar 的方法将触发“未找到实例方法”警告。即使我与 SDK 5.0 链接也是如此。

更重要的是,用作参数的枚举 UIBarMetrics 被报告为“未声明的标识符”,这将触发编译器错误。

知道为什么会这样吗?我意识到如果部署目标低于 5.0,代码将不起作用,但我正在检查 UINavigationBar 在运行时是否响应该选择器,所以一切都应该没问题。我不明白编译器错误。

编辑:这只发生在为设备编译时,并且当设备实际插入时(我测试过的设备运行 iOS 5.0.1)。

0 投票
2 回答
4760 浏览

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

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

0 投票
4 回答
7297 浏览

objective-c - 如何在 iOS 中访问弱链接框架?

我想使用适用于 iOS 5 的 Twitter 框架,但能够在旧操作系统中运行我的应用程序。

我在 Xcode 4.2 目标设置中添加了弱引用框架(即设置“可选”标志)。基础 SDK 是 iOS 5,iOS 部署目标是 iOS 3.2。

接下来,我尝试使用 Twitter 框架:

它在 iOS 5 模拟器上运行良好。一旦我尝试使用具有旧操作系统版本的模拟器或真实设备,我就会收到错误“Twitter/Twitter.h”文件未找到(在编译时)。如果我删除“#import”指令,我会收到一些错误 TWTweetComposeViewController class not found。

如果我评论所有与 Twitter 相关的代码,我会收到链接器错误:“ld: framework not found Twitter”。ld 命令导致错误:

这里有什么问题?

0 投票
1 回答
478 浏览

objective-c - 从弱链接的 iOS 类或不在部署目标 iOS 版本中的类继承

我的代码中有一个类(我们称之为 myRefLib),它继承自 UIReferenceLibraryViewController(UIKit 框架的一部分),这是一个仅在 iOS 5 及更高版本中可用的类。我想要一个 iOS 3.2 的部署目标。

如果我只是创建 UIReferenceLibraryViewController 的实例,我知道我可以使用 5 的基本 SDK,然后在运行包含它的任何代码之前使用 [UIReferenceLibraryViewController 类] 测试该类是否存在。但是,如果我是从类继承的,我该怎么做呢?

问题是我必须为将使用它的代码部分#include 继承类 myRefLib - 但没有办法在运行时有条件地这样做。或者,也没有运行时有条件地从 myRefLib 中的 UIReferenceLibraryViewController 继承的方法。我还想让 myRefLib 的一个实例成为另一个类的属性 - 同样,我怎样才能有条件地执行该运行时?

非常感谢任何帮助...

D

0 投票
1 回答
1370 浏览

c++ - Function with weak atributte can not be overwritten

I would like to overwrite function (interupt handlers) with the weak attribute, but linker does not link my definition. Codes are shorted for better reading.

vectors.c

I redefine default definition in the file cpuexcept.cpp

If I compile and dump it, output (library lib.a) is:

Default function with the weak attribute is linked in to target application. My definition is linked correct, if I define function f() in cpuexcept.cpp and I use it in main function or if my definiton of handler is in other .c module. I use arm-none-eabi-gcc 4.6.2 (YAGARTO) compiler in cygwin.

0 投票
1 回答
1945 浏览

gcc - 弱属性是否仅适用于 Linux GCC 中的共享库?

我是 Linux gcc 的新手。我正在编写一个简单的代码来学习 Linux gcc 中的弱属性。

查看我的示例代码:

weakref.c,主文件。我希望文件可以在定义或不定义 foo 方法的情况下工作。

所以,我运行以下命令来编译它并运行它:

并且输出是“foo is not defined”,这是我所期望的。

然后我创建了一个新文件 libfoo.c,见下图:

我尝试了 3 种方法来尝试使主文件与 libfoo.c 一起使用:

  1. 编译 libfoo.c 和 weakref.c 并链接目标文件。
  2. 将libfoo.c编译为静态库,并与weakref.c的目标文件链接
  3. 将libfoo.c编译为共享库,并与weakref.c的目标文件链接

只有第三种方式有效并获得以下输出:

您能否让我知道弱引用是否仅适用于共享库,为什么?非常感谢!

0 投票
3 回答
603 浏览

java - Java 如何解决这个无类型的泛型方法?

今天我遇到了一个让我非常想知道的函数。因此,让我们假设这个简单的结构以进行澄清。

现在将 a 分配Dog给一个Animal指针是绝对有效的,但像这样将一个分配Animal给一个Dog指针是无效的:

让我们假设一个 AnimalCage 类,其中“魔术”发生:

使用AnimalCage可以做到这一点:

所以我可以在不显式转换的情况下做任何事情。这使我得出这样的假设,即Erasures在运行时不会被删除,尽管我知道得更好。在我认为我必须至少给出一个关于像这个函数一样投射什么的指标之前:

我真的很想知道 Java 如何让我在猫/狗上分配动物,以及它必须投射的动物的专业化

0 投票
1 回答
570 浏览

objective-c - Weak linking popoverBackgroundViewClass to make it work in <5.0 IOS

Already checked this question: Weak linking UIPopoverBackgroundView and already read: http://www.marco.org/2010/11/22/supporting-older-versions-of-ios-while-using-new-apis#fnref:1

I have a custom PopoverBackgroundView declared in a .h and implemented in a .m file. Then, in just one file, I instantiate it like this

I´ve tried doing it like marco says in the link above:

But I get the same launch error when I run in a 4.3 ipad simulator

My base sdk is IOS 5.1, and my target deployment is 5.1 as well. Im using LLVM compiler 4.0.

Any ideas? Thanks a lot!

0 投票
2 回答
18503 浏览

c - 如何使静态库中的 gcc 链接强符号覆盖弱符号?

我的问题可以总结如下:

bar.c

主.c

生成文件

输出

因此 main.c 中的弱符号 bar 不会被 bar.c 中的强符号覆盖,因为 bar.c 链接到静态库 libbar.a 中的 main.c。

如何告诉 gcc 使 libbar.a 中的强符号覆盖 main.c 中的弱符号?