コマンドbrew install Valgrind
を使用してValgrindをインストールしようとすると、「valgrind:この式は、アップストリームの非互換性のためにSierraより新しいmacOSバージョンで期待どおりにコンパイルまたは機能しません。ビルド。」
代わりにbrew intall --HEAD Valgrind
コマンドを使用してインストールしようとしましたが、依存関係autoconf、automake、libtoolを正常にインストールした後、valgrindをインストールしようとすると、構成エラーが発生します。
"Valgrindは、Darwin 10.x、11.x、12.x、13.x、14.x、15.x、16.x、および17.xで動作します(Mac OS X 10.6/7/8/9/10/11およびmacOS 10.12/13)」
私のOSはmacOs Mojave(10.14)であるため、Homebrewで機能するValgrindを現在インストールできないということですか?
this patch 、 this post 、および this answer に基づくソースの回避策からの(やや痛い)インストール。
$ git clone https://github.com/Echelon9/valgrind.git
$ cd valgrind
$ git checkout feature/v3.14/macos-mojave-support-v2
$ ./autogen.sh
$ ./configure --prefix=/where/you/want/it/installed --enable-only64bit
$ make
次のエラーが表示される場合:No rule to make target '/usr/include/mach/mach_vm.defs’
、xcode-select --install
を実行する必要があります。 Xcodeをまだお持ちでない場合は、アプリストアからインストールする必要があります。それが完了したら、coregrind/Makefile
を編集する必要があります。
検索する:
am__append_19 = \
/usr/include/mach/mach_vm.defs \
/usr/include/mach/task.defs \
/usr/include/mach/thread_act.defs \
/usr/include/mach/vm_map.defs
以下のフォルダーが存在することを再確認した後、すべての行に次のプレフィックスを付けます。
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.14.sdk
最終結果は次のとおりです。
am__append_19 = \
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.14.sdk/usr/include/mach/mach_vm.defs \
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.14.sdk/usr/include/mach/task.defs \
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.14.sdk/usr/include/mach/thread_act.defs \
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.14.sdk/usr/include/mach/vm_map.defs
ここでmake
を再度実行すると、インクルードが見つかるはずです。しかし、それは必ずしもコンパイルするという意味ではありません。次のエラーが表示されました。
vg_preloaded.c:136:19: error: expected ';' before 'const'
__private_extern__ const char *__crashreporter_info__ = "Instrumented by Valgrind " VERSION;
これを修正するには、次の行を追加します。
#define __private_extern__ extern
次のファイルに:
coregrind/m_syscall.c
coregrind/m_syswrap/syswrap-darwin.c
coregrind/vg_preloaded.c
最後に、他のエラーが表示されないことを期待して指を交差させる必要があります。
$ make
$ make install
私は同じ問題を抱えています。 valgrindは最新のmacOS(10.14 Mojave)と互換性がないようです。 High Sierraの方法でインストールを試みました( https://www.gungorbudak.com/blog/2018/04/28/how-to-install-valgrind-on-macos-high-sierra/ )そして、あなたが説明したのと同じ出力を得ました。今すぐ提供できる唯一のソリューションは、仮想マシンで作業する( https://www.virtualbox.org/ )か、Dockerを使用する(- https://www.gungorbudak。 com/blog/2018/06/13/memory-leak-testing-with-valgrind-on-macos-using-docker-containers / )。
MacOS 10.14.5 Mojave用のValgrindの実験版は次の場所で使用できます。
https://github.com/sowson/valgrind
それを使用するコマンドは次のとおりです。
brew install --HEAD https://raw.githubusercontent.com/sowson/valgrind/master/valgrind.rb
それはまだ実験的であり、いくつかの作業が必要ですが、単純なプロジェクトでは既に動作しています...お楽しみください!
さらに、OSX 10.14でこれが機能していることがわかりました
brew install --HEAD https://raw.githubusercontent.com/LouisBrunner/valgrind-macos/master/valgrind.rb
OSXを正しく取得するために機能しているブランチ。実際のvalgrindのバージョンが修正されるまで、私たちを奮い立たせるものです。
MacOには適切なソリューションではありませんが、当分の間、Dockerイメージを作成しました。 macOS用のdockerをインストールした後、valgrindを開始する方法は次のとおりです。
cd </path/to/source/directory/where/you/want/run/valgrind/with>
curl -O https://raw.githubusercontent.com/biocyberman/ValgrindDocker/master/startValgrind
./startValgrind # this will takes time for the first time, because it needs to fetch docker valgrind image
# you will get a root command Prompt inside the docker image.
# do what ever you want
# type 'exit' to quit
Alex.mの回答に従ってvalgrindを取得できますが、int main() { return 0; }
プログラムで使用すると、多くの奇妙なエラーと、存在しないallocs/freeが発生します。
これらの迷惑なエラーを「隠す」には、次の手順を実行します(実際の修正よりも回避策です)( このwikiページ およびvalgrindソースコードの調査に基づいています)。
int main() { return 0; }
プログラムを作成してコンパイルします。valgrind --leak-check=full --show-reachable=yes --error-limit=no --gen-supressions=all --log-file=minimalraw.log ./minimal
.supp
valgrindファイルを作成します。cat ./minimalraw.log | ./parse_valgrind_suppressions.sh > minimal.supp
minimal.supp
ファイルの最後に$YOUT_VALGRIND_INSTALLATION_PATH$/lib/default.supp
コンテンツをコピーして貼り付けますこれで完了です!エラーは無視されます。存在しないallocやfreeなども削除したい場合は、valgrindのソースコードを直接編集できます。または、漏れ追跡にheapusage
を使用します
Mac(Mojave 10.14.6)でVALGRINDを使用する実用的なソリューションを見つけました。このコマンドを実行するだけです:
brew install --HEAD https://raw.githubusercontent.com/LouisBrunner/valgrind-macos/master/valgrind.rb
( https://github.com/LouisBrunner/valgrind-macos から)
それがあなたのために働くことを願っています。