5

質問

C++14 またはその他の C++ バージョンでの Intel Pin の使用に関していくつか質問があります。

  • 古い C++ のコードを新しいバージョンでコンパイルする際に問題が発生することはめったにありませんが、Intel Pin は命令レベルを操作するため、C++11 または C++14 でコンパイルした場合に望ましくない副作用はありますか?
  • C++11 または C++14 でコンパイルしても問題ない場合、自分のツールに対してのみ新しいバージョンの C++ を有効にするルールを作成するにはどうすればよいですか?
  • 可能であれば、 GCC/G++ の既定の C++ バージョンを最新に設定するにはどうすればよいですか? また、そうする際に留意すべきことは何ですか?

状況

動的コール グラフ ピン ツールを作成しています。わかりやすくするために、コール スタックの深さを計算しています。安全のために、深さをインクリメントまたはデクリメントするコードの抜粋を でラップすることにしましたstd::mutexstd::mutexこれにより、C++ 11 以降でのみ利用可能な問題が発生しました。これは、私のマシンの Intel Pin のデフォルトではありません。

$ g++ -v
[...]
gcc version 5.4.0 20160609 (Ubuntu 5.4.0-6ubuntu1~16.04.2)

コンパイル コマンド:

$ make obj-intel64/callgraph.so
[...]
error: #error This file requires compiler and library support for the ISO C++ 2011 standard. This support must be enabled with the -std=c++11 or -std=gnu++11 compiler options.
#error This file requires compiler and library support
[...]

編集

バージョンを C++11 に定義するビルド ルールを作成できましたが、壊れてしまいました。make を介して g++ に送信されたコマンドは、

g++ -DBIGARRAY_MULTIPLIER=1 -Wall -Werror -Wno-unknown-pragmas -D__PIN__=1
-DPIN_CRT=1 -fno-stack-protector -fno-exceptions -funwind-tables
-fasynchronous-unwind-tables -fno-rtti -DTARGET_IA32E -DHOST_IA32E -fPIC
-DTARGET_LINUX -fabi-version=2  -I/home/gabriel/Downloads/pin-3.0-76991-gcc-linux/source/include/pin
-I/home/gabriel/Downloads/pin-3.0-76991-gcc-linux/source/include/pin/gen
-isystem /home/gabriel/Downloads/pin-3.0-76991-gcc-linux/extras/stlport/include
-isystem /home/gabriel/Downloads/pin-3.0-76991-gcc-linux/extras/libstdc++/include
-isystem /home/gabriel/Downloads/pin-3.0-76991-gcc-linux/extras/crt/include
-isystem /home/gabriel/Downloads/pin-3.0-76991-gcc-linux/extras/crt/include/arch-x86_64
-isystem /home/gabriel/Downloads/pin-3.0-76991-gcc-linux/extras/crt/include/kernel/uapi
-isystem /home/gabriel/Downloads/pin-3.0-76991-gcc-linux/extras/crt/include/kernel/uapi/asm-x86
-I/home/gabriel/Downloads/pin-3.0-76991-gcc-linux/extras/components/include
-I/home/gabriel/Downloads/pin-3.0-76991-gcc-linux/extras/xed-intel64/include
-I/home/gabriel/Downloads/pin-3.0-76991-gcc-linux/source/tools/InstLib -O3
-fomit-frame-pointer -fno-strict-aliasing  -std=c++11 
-c -o obj-intel64/callgraph.o callgraph.cpp

これはコンパイルされません。代わりに、STL ヘッダー内の巨大なエラー ログに分類されます。Pin には、C++11 および C++14 と競合する STL の独自のサブセットが付属しているようです。g++ 出力のペーストをアップロードしました。それは 2331 行を埋めましたが、アクセスするフォルダーに奇妙な点があることに気付きました。STL ライブラリは、次の2 つの異なるディレクトリから含まれています。

  • /usr/include/c++/5/
  • /home/gabriel/Downloads/pin-3.0-76991-gcc-linux/extras/stlport/include/

エラーを 1 つずつ解決することは不可能です。ピン stl ポートを削除することは、おそらくさらに悪い考えです。Pin を新しい C++ で使用できる場合は、単純ではないと思いますstd=c++1y

4

1 に答える 1