J'ai essayé d'installer Valgrind avec la commande brew install Valgrind
et un message "Valgrind: cette formule ne fonctionne pas ou ne fonctionne pas comme prévu sur les versions macOS plus récentes que Sierra en raison d'une incompatibilité en amont. Erreur: une exigence non satisfaite a échoué construire."
J'ai essayé d'installer avec la commande brew intall --HEAD Valgrind
à la place, après avoir installé avec succès les dépendances autoconf, automake et libtool, quand il essaie d'installer valgrind, j'obtiens une erreur de configuration:
"Valgrind fonctionne avec Darwin 10.x, 11.x, 12.x, 13.x, 14.x, 15.x, 16.x et 17.x (Mac OS X 10.6/7/8/9/10/11 et macOS 10.12/13) "
Mon système d'exploitation est macOs Mojave (10.14). Cela signifie-t-il que je ne peux pas installer actuellement un Valgrind fonctionnel avec Homebrew?
Une installation (plutôt pénible) de la solution source basée sur ce correctif , cet article et cette réponse .
$ 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
Si vous obtenez l'erreur suivante: No rule to make target '/usr/include/mach/mach_vm.defs’
, vous devrez exécuter xcode-select --install
. Vous devrez peut-être installer Xcode à partir de l'App Store si vous ne l'avez pas déjà. Une fois cela fait, vous devrez éditer le coregrind/Makefile
:
Rechercher:
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
Après avoir vérifié que le dossier ci-dessous existe, préfixez chaque ligne avec:
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.14.sdk
Le résultat final devrait être:
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
Maintenant, exécutez à nouveau make
et l'inclus devrait être trouvé. Mais cela ne signifie pas nécessairement qu'il va compiler. J'ai eu l'erreur suivante:
vg_preloaded.c:136:19: error: expected ';' before 'const'
__private_extern__ const char *__crashreporter_info__ = "Instrumented by Valgrind " VERSION;
Un correctif pour cela consiste à ajouter la ligne suivante:
#define __private_extern__ extern
aux fichiers suivants:
coregrind/m_syscall.c
coregrind/m_syswrap/syswrap-darwin.c
coregrind/vg_preloaded.c
Enfin, vous devez croiser les doigts en espérant qu'aucune autre erreur ne se produise:
$ make
$ make install
J'ai le même problème. Il semble que valgrind ne soit pas compatible avec le dernier macOS (10.14 Mojave). J'ai essayé de l'installer à la manière de High Sierra ( https://www.gungorbudak.com/blog/2018/04/28/how-to-install-valgrind-on-macos-high-sierra/ ) et a obtenu le même résultat que vous avez décrit. La seule solution que je puisse vous proposer actuellement est de travailler sur une machine virtuelle ( https://www.virtualbox.org/ ) ou d'utiliser Docker ( https: //www.gungorbudak. com/blog/2018/06/13/test de fuite de mémoire avec valgrind-sur-macos-using-docker-containers / ).
Vous pouvez utiliser la version expérimentale de Valgrind pour macOS 10.14.5 Mojave à:
https://github.com/sowson/valgrind
La commande à utiliser est la suivante:
brew install --HEAD https://raw.githubusercontent.com/sowson/valgrind/master/valgrind.rb
Il est encore expérimental et a besoin de travail, mais pour des projets simples, cela fonctionne déjà ... Profitez-en!
ajout: j'ai trouvé celui-ci qui fonctionnait pour moi sur mon OSX 10.14
brew install --HEAD https://raw.githubusercontent.com/LouisBrunner/valgrind-macos/master/valgrind.rb
Une branche qui travaille pour obtenir OSX correct. quelque chose à nous aider jusqu'à ce que nous obtenions une vraie version de valgrind corrigée.
Pas une solution appropriée pour les macOs, mais pour le moment, j'ai créé une image de menu fixe. Après avoir installé docker pour macOS, voici comment démarrer 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
Vous pouvez suivre la réponse de alex.m pour obtenir valgrind, mais si vous l'utilisez sur un programme int main() { return 0; }
, vous obtiendrez de nombreuses erreurs étranges et des alloc/free inexistants.
Pour "masquer" ces erreurs ennuyeuses, vous pouvez suivre ces étapes (c'est plus une solution de contournement qu'un correctif réel) (basé sur cette page du wiki et quelques recherches dans le code source de 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
à la fin du fichier $YOUT_VALGRIND_INSTALLATION_PATH$/lib/default.supp
Et vous avez terminé! Les erreurs vous sont ignorées. Si vous souhaitez également supprimer les allocations, les libérations, etc. non existants, vous pouvez directement éditer le code source de valgrind. Ou juste utiliser heapusage
pour le suivi de fuite
Je viens de trouver une solution efficace pour utiliser VALGRIND sur mon Mac (Mojave 10.14.6). Il suffit de lancer cette commande:
installation de la bière --HEAD https://raw.githubusercontent.com/LouisBrunner/valgrind-macos/master/valgrind.rb
(De https://github.com/LouisBrunner/valgrind-macos )
J'espère que cela fonctionnera pour vous.