私はcファイルを使用したテストのためにGPROFを使用してUbuntu 17.10で作業しており、gprofで生成されたファイル(gmon.out)を実行し、-pgオプションを使用してコンパイルおよびリンクすると、空のフラットと呼び出しグラフが表示されました。しかし、これはgccのバグであり、ファイルをコンパイルして-no-pieでリンクする必要があることがわかりました。
コンパイル:gcc -c main.c file-1.c file-2.c -pg [-no-pie]
リンク:gcc -o test main.o file-1.o file-2.o -pg [-no-pie]
私はgcc 7.2バージョンを持っています。
このオプションはどのように機能し、なぜこのオプションを使用しないとグラフが空になるのですか?
そのフラグは、gccに 位置に依存しない実行可能ファイル (PIE)を作成しないように指示しています。 PIEは、カーネルが実行されるたびに、バイナリと依存関係を仮想メモリのランダムな場所にロードするセキュリティ機能です。