6

我只是想定义一个全局标签,指向 ac 文件中的一行代码,然后 bc 文件可以识别该标签。两个文件都链接在一起。问题是 bc 文件无法识别它,因为编译器/链接器认为 ac 文件中的标签是文件特定的。

我在这里找到了一个类似的问题和答案:Use label in Assembly from C 但我想在 C/C++ 中而不是在 Assembly 中定义一个全局标签。

PS,我没有使用 goto 语句:)

4

2 回答 2

4

根据 C++ 标准

标签的范围是它出现的功能。

于 2013-10-17T22:53:10.003 回答
3

在 GCC 中,您可以使用内联汇编来完成:

#define LABEL_SYMBOL(name) asm volatile("labelsym_" name "_%=: .global labelsym_" name "_%=":);

然后在您的代码中:

LABEL_SYMBOL("xxx")

_%附加到符号确保它在编译单元中是唯一的(https://gcc.gnu.org/onlinedocs/gcc/Extended-Asm.html#Special-format-strings

然后你可以找到所有检查 ELF 程序头的符号,如:List all the functions/symbols on the fly in C code on a Linux architecture?

于 2018-12-09T22:08:13.467 回答