问题标签 [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.
c++ - `__attribute__((weak))` 的 Windows 等效项是什么?
我正在尝试将 GNU 项目移植到 Windows,但遇到了以下 GNU 语法...
Windows 相当于什么,或者 Windows 如何处理弱符号?
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_IRQHandler
in file1.c
,它只是试图解析 in 中给出的表达式.set
。
有人可以准确地解释发生了什么吗?POWER_CLOCK_IRQHandler
当Default_Handler
实现在另一个文件中时,保持弱属性有效的正确解决方案是startup.s
什么?
c++ - 如何用属性weak替换静态库中的符号
假设我有这样的代码:
lib.h:
lib.cpp:
这些代码将被编译成libA.a
.
然后在我的测试单元中,我想覆盖这个func
函数,例如:
测试.cpp:
和:
但在我的结果中,输出始终是original
.
静态库函数的正确方法是什么weak
,然后在外部覆盖它?
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
gcc - -qnoweakexp xlC 编译器标志的 gcc 等效项是什么?
我们目前正在从 AIX 和 xlC 编译器迁移到 Linux 和 GNU 工具链。在我们的 C/C++ 编译过程中,我们使用-qnoweakexp
编译器标志来禁用弱符号的导出。请参阅xlc 编译器参考。
我在gcc Options Summary中找不到等效的编译器标志。最终目标是没有弱符号被导出到我们的编译目标。我能找到的最接近的 gcc 标志是-fno-weak
,但是gcc 手册指出该标志不打算在生产代码中使用。
背景:我们需要将我们正在使用的框架的一些 C 库与我们的编译目标链接,这些库导出一些相同的弱符号,我们自己的代码在不使用此标志的情况下会这样做。这导致分段错误偶尔发生。这些符号显然是为我们正在使用的一些 STL 容器生成的,例如:
即,某些符号在源代码中没有被明确注释为弱的情况,因此无法通过删除注释来解决问题。
linux - __attribute__ ((weak)) 不适用于全局变量
以上是我的代码和测试结果。我很困惑为什么它不能按预期工作。
也尝试功能,而不是以太。下面是测试结果。
c++ - 为什么使用模板生成的函数具有“弱”作为符号类型?
创建了一个模板函数C++ template <class T> void myswap(T&d,T&s)
。Main 将它用于 int、double 和复杂类型。使用 g++ 编译源代码。通过 nm 转储符号表时,为相应类型生成的函数具有符号类型“W”。
为什么它们被生成为弱符号?
c++ - 如何在 C++ 中使用弱函数
我正在尝试在 C++ 的类中使用弱函数。下面是我写的:
但这会产生以下编译错误:
如果我将 func() 移到一个类之外并使用 gcc 而不是 g++,它可以正常编译并按预期工作。有人可以告诉什么问题。基本上,我只想在不使用 cpp 文件中的编译器标志的情况下调用某些类函数(可选功能)。
c - 绕过/切换/选择弱符号
在一个简单的例子中:
当我进入malloc
时,gdb
我最终进入libc
:
如果我用 ASan 编译,gcc -fsanitize=address -g test.c -o test
我最终会被 ASan 拦截:
这是因为首先加载 ASan 并导出一个弱符号:
是否可以固定malloc
调用libc
版本而不是 ASan?
我尝试了以下但没有成功:
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。
他们将它们编译如下:
然后链接它们并执行如下:
仅使用目标文件:
bgl-ads-2997:~/weak_symbol > gcc mo weak.o strong.o -L -Wl
pwd
,-Rpwd
-o sharedbgl-ads-2997:~/weak_symbol > ./shared
弱 = 10
在这种情况下,弱符号被屏蔽。和预期的一样强信号。
与对象文件中的星期符号和共享对象中的强符号链接。
bgl-ads-2997:~/weak_symbol > gcc -lstrong mo weak.o -L -Wl
pwd
,-Rpwd
-o sharedbgl-ads-2997:~/weak_symbol > ./shared
弱 = 1
在这种情况下,弱符号不会被替换。
似乎符号在编译时被解析,而不是作为执行的一部分,不考虑共享期望这也打印 10 但不是这样,那么这是预期的行为吗?有没有办法从共享库中替换周符号?