下記のような、最適化によってインライン展開されるような関数内で、ラベルを含むインラインアセンブラを使うと、コンパイル時にラベル重複でエラーとなってしまいます。
c:
1#include <stdio.h> 2 3static int func(){ 4 __asm__("xxx:"); 5 return 0; 6} 7 8int main(){ 9 printf("%d\n", func()); 10 printf("%d\n", func()); 11 return 0; 12}
$ gcc -O1 hoge.c -o hoge # 少しでも最適化するとエラーになる hoge.c: Assembler messages: hoge.c:4: Error: symbol `xxx' is already defined $ gcc -O0 hoge.c -o hoge # -O0だとコンパイルできる $
最適化を-O0にしたり、関数func()
を別の翻訳単位に移動してリンクしたりする以外に、これを回避する方法ってあるのでしょうか?
x64のLinuxと、GCC 4.9, 5.2で試しています。
回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/02/17 08:54
2016/02/17 12:23