web-dev-qa-db-fra.com

Sur mac, g ++ (clang) ne parvient pas à rechercher / usr / local / include et / usr / local / lib par défaut

Je suis sur un Mac et j'ai utilisé homebrew pour installer gmp.

Kyumins-iMac:gcjlib math4tots$ g++ main.cpp -lgmp -lgmpxx
In file included from main.cpp:2:
./gcjlib.hpp:4:10: fatal error: 'gmpxx.h' file not found
#include <gmpxx.h>
         ^
1 error generated.

Alors j'ai dit explicitement g++ utiliser /usr/local/include

Kyumins-iMac:gcjlib math4tots$ g++ main.cpp -lgmp -lgmpxx -I/usr/local/include
ld: library not found for -lgmp
clang: error: linker command failed with exit code 1 (use -v to see invocation)

Alors j'ai dit explicitement g++ utiliser /usr/local/lib

Kyumins-iMac:gcjlib math4tots$ g++ main.cpp -lgmp -lgmpxx -I/usr/local/include -L/usr/local/lib
Kyumins-iMac:gcjlib math4tots$ ./a.out 
sum is -4444
absolute value is 4444

Donc, le seul problème semble être que g++ ne reconnaît pas /usr/local.

Mais il est fastidieux de taper tout cela tout le temps, surtout lorsque j'écris simplement de petits programmes à fichier unique.

Existe-t-il un moyen pour moi d'obtenir g++ pour reconnaître le contenu dans /usr/local par défaut? Existe-t-il une méthode standard pour les utilisateurs de homebrew?


Je suis sur OS X 10.9.3 avec Xcode 5.1.1 au cas où cela serait pertinent.

40
math4tots

J'utilise également Homebrew et j'ai eu un problème similaire sur Mac OSX Maverick 10.9.5 et Xcode 6.0.1, mais il a été résolu en exécutant:

xcode-select --install

Notez que cela ne fonctionne pas sans les doubles tirets donnés par la réponse précédente. Cela installe les outils de ligne de commande qui créent également /usr/lib/ et /usr/include/. Je ne sais pas pourquoi Homebrew ne vérifie pas automatiquement cela lors de l'installation, car il vérifie Xcode ...

Si vous voulez vérifier exactement dans quels dossiers votre compilateur recherche les fichiers d'en-tête, vous pouvez écrire:

cpp -v

60
Jonas Sellberg

Essayez d'exécuter xcode-select install

Au moins sur Mavericks, j'ai trouvé que si j'installe l'application Xcode sans installer les outils de ligne de commande, les outils sont en quelque sorte disponibles, mais les builds Unix-ey normaux ne fonctionnent pas correctement. Un symptôme est que /usr/local/include n'est pas sur le chemin de recherche d'inclusion. Les outils de ligne de commande semblent résoudre ce problème.

10
Russell Owen

Une solution de contournement consisterait à:

export C_INCLUDE_PATH=/usr/local/include
export CPLUS_INCLUDE_PATH=/usr/local/include

Au moins, cela a trompé le pré-processeur pour qu'il se comporte ici :)

8
Philippe

J'ai Yosemite 10.10.5 et j'exécute xcode-select --install n'a pas résolu le problème pour moi. La commande est retournée avec xcode-select: error: command line tools are already installed, use "Software Update" to install updates.

Quand j'ai couru xcode-select -p, cela montrait /Applications/Xcode.app/Contents/Developer. J'ai fini par supprimer Xcode du répertoire Applications, ce qui a entraîné xcode-select -p retour /Library/Developer/CommandLineTools. Cette erreur de compilation fixe pour moi.

3
mchan

Cela m'a été utile:

Utilisez la dernière version. 1.0.2o_1 juste une version actuelle.

brew install openssl
ln -s /usr/local/Cellar/openssl/1.0.2o_1/include/openssl /usr/local/include/openssl
ln -s /usr/local/Cellar/openssl/1.0.2o_1/lib /usr/local/lib/openssl
1
Vyacheslav