6

ac ファイル内の 1 行のコードを指すグローバル ラベルを定義したかっただけで、bc ファイルはそのラベルを認識できます。両方のファイルがリンクされています。問題は、コンパイラ/リンカーが ac ファイルのラベルがファイル固有であると考えているため、bc ファイルがそれを認識できなかったことです。

ここで同様の質問と回答を見つけました: Use label in Assembly from C しかし、Assembly ではなく C/C++ でグローバル ラベルを定義したかったのです。

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 プログラム ヘッダーを検査するすべてのシンボルを見つけることができます

于 2018-12-09T22:08:13.467 に答える