问题标签 [weak-symbol]

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 投票
0 回答
204 浏览

c++ - `__attribute__((weak))` 的 Windows 等效项是什么?

我正在尝试将 GNU 项目移植到 Windows,但遇到了以下 GNU 语法...

Windows 相当于什么,或者 Windows 如何处理弱符号

0 投票
0 回答
671 浏览

c - 弱符号属性和外部声明

这是一些用 GCC 编译的 ARM 汇编代码。

片段来自startup.s

file1.c

在这段代码中,POWER_CLOCK_IRQHandler是一个弱符号。当代码运行时,代码 fromfile1被执行。

现在我Default_Handler在另一个文件中定义,并在startup.s.

在文件 3 中:

如果我将 的定义写Default_Handler在另一个文件中或者我声明Default_Handler为弱,POWER_CLOCK_IRQHandler将链接到Default_Handler. 链接器错过了弱属性并且没有将其链接到POWER_CLOCK_IRQHandlerin file1.c,它只是试图解析 in 中给出的表达式.set

有人可以准确地解释发生了什么吗?POWER_CLOCK_IRQHandlerDefault_Handler实现在另一个文件中时,保持弱属性有效的正确解决方案是startup.s什么?

0 投票
0 回答
101 浏览

c++ - 如何用属性weak替换静态库中的符号

假设我有这样的代码:

lib.h:

lib.cpp:

这些代码将被编译成libA.a.

然后在我的测试单元中,我想覆盖这个func函数,例如:

测试.cpp:

和:

但在我的结果中,输出始终是original.

静态库函数的正确方法是什么weak,然后在外部覆盖它?

0 投票
2 回答
136 浏览

objective-c - Why cannot we use the negation operator when checking for the existence of a symbol?

The answers to this question state that if (x != nil) is the same as if (x).

But Apple documentation reads:

Note: When checking for the existence of a symbol, you must explicitly compare it to NULL or nil in your code. You cannot use the negation operator ( ! ) to negate the address of the symbol.

Which seems to contradict "Working with nil" from https://developer.apple.com/library/content/documentation/Cocoa/Conceptual/ProgrammingWithObjectiveC/WorkingwithObjects/WorkingwithObjects.html#//apple_ref/doc/uid/TP40011210-CH4-SW22

0 投票
1 回答
388 浏览

gcc - -qnoweakexp xlC 编译器标志的 gcc 等效项是什么?

我们目前正在从 AIX 和 xlC 编译器迁移到 Linux 和 GNU 工具链。在我们的 C/C++ 编译过程中,我们使用-qnoweakexp编译器标志来禁用弱符号的导出。请参阅xlc 编译器参考

我在gcc Options Summary中找不到等效的编译器标志。最终目标是没有弱符号被导出到我们的编译目标。我能找到的最接近的 gcc 标志是-fno-weak,但是gcc 手册指出该标志不打算在生产代码中使用。

背景:我们需要将我们正在使用的框架的一些 C 库与我们的编译目标链接,这些库导出一些相同的弱符号,我们自己的代码在不使用此标志的情况下会这样做。这导致分段错误偶尔发生。这些符号显然是为我们正在使用的一些 STL 容器生成的,例如:

即,某些符号在源代码中没有被明确注释为弱的情况,因此无法通过删除注释来解决问题。

0 投票
3 回答
1818 浏览

linux - __attribute__ ((weak)) 不适用于全局变量

以上是我的代码和测试结果。我很困惑为什么它不能按预期工作。

也尝试功能,而不是以太。下面是测试结果。

0 投票
1 回答
422 浏览

c++ - 为什么使用模板生成的函数具有“弱”作为符号类型?

创建了一个模板函数C++ template <class T> void myswap(T&d,T&s)。Main 将它用于 int、double 和复杂类型。使用 g++ 编译源代码。通过 nm 转储符号表时,为相应类型生成的函数具有符号类型“W”。

为什么它们被生成为弱符号?

0 投票
1 回答
573 浏览

c++ - 如何在 C++ 中使用弱函数

我正在尝试在 C++ 的类中使用弱函数。下面是我写的:

但这会产生以下编译错误:

如果我将 func() 移到一个类之外并使用 gcc 而不是 g++,它可以正常编译并按预期工作。有人可以告诉什么问题。基本上,我只想在不使用 cpp 文件中的编译器标志的情况下调用某些类函数(可选功能)。

0 投票
1 回答
104 浏览

c - 绕过/切换/选择弱符号

在一个简单的例子中:

当我进入malloc时,gdb我最终进入libc

如果我用 ASan 编译,gcc -fsanitize=address -g test.c -o test我最终会被 ASan 拦截:

这是因为首先加载 ASan 并导出一个弱符号:

是否可以固定malloc调用libc版本而不是 ASan?

我尝试了以下但没有成功:

0 投票
0 回答
53 浏览

c - 使用共享库处理带有 __attrubute((weak)) 的 gcc 弱符号

写文件,一个是弱文件,另一个是普通符号。以下是文件的内容: 其中 weak_ex() 是用弱符号声明的定义。

bgl-ads-2997:~/weak_symbol > cat mc

bgl-ads-2997:~/weak_symbol > cat weak.c

bgl-ads-2997:~/weak_symbol > cat strong.c

bgl-ads-2997:~/weak_symbol > cat weak.h

所以使用上述定义,弱符号将返回 1,而强符号将返回 10。

他们将它们编译如下:

然后链接它们并执行如下:

  1. 仅使用目标文件:

    bgl-ads-2997:~/weak_symbol > gcc mo weak.o strong.o -L -Wl pwd,-R pwd-o shared

    bgl-ads-2997:~/weak_symbol > ./shared

    弱 = 10

在这种情况下,弱符号被屏蔽。和预期的一样强信号。

  1. 与对象文件中的星期符号和共享对象中的强符号链接。

    bgl-ads-2997:~/weak_symbol > gcc -lstrong mo weak.o -L -Wl pwd,-R pwd-o shared

    bgl-ads-2997:~/weak_symbol > ./shared

    弱 = 1

在这种情况下,弱符号不会被替换。

似乎符号在编译时被解析,而不是作为执行的一部分,不考虑共享期望这也打印 10 但不是这样,那么这是预期的行为吗?有没有办法从共享库中替换周符号?