В Mac g++ (clang) не может найти /usr/local/include и /usr/local/lib по умолчанию
Я на Mac, и я использовал homebrew
установить 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.
Итак, я прямо сказал g++
использовать /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)
Итак, я прямо сказал g++
использовать /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
Таким образом, единственная проблема, кажется, что g++
не в состоянии признать /usr/local
,
Но все это утомительно печатать все время, особенно когда я просто пишу небольшие однофайловые программы.
Есть ли способ для меня, чтобы получить g++
признать вещи в /usr/local
по умолчанию? Есть ли стандартный способ homebrew
пользователи делают это?
Я на OS X 10.9.3 с Xcode 5.1.1 на случай, если это актуально.
7 ответов
Я также использую Homebrew и у меня была похожая проблема на Mac OSX Maverick 10.9.5 и Xcode 6.0.1, но она была решена с помощью команды:
xcode-select --install
Обратите внимание, что это не работает без двойных дефисов, указанных в предыдущем ответе. Это устанавливает инструменты командной строки, которые также создают /usr/lib/
а также /usr/include/
, Я не знаю, почему Homebrew не проверяет это автоматически при установке, так как он проверяет Xcode...
Если вы хотите точно проверить, какие папки ваш компилятор просматривает для заголовочных файлов, вы можете написать:
cpp -v
Обходной путь должен был бы:
export C_INCLUDE_PATH=/usr/local/include
export CPLUS_INCLUDE_PATH=/usr/local/include
По крайней мере, это заставило препроцессор вести себя здесь:)
Попробуйте запустить xcode-select install
По крайней мере, на Mavericks, который я обнаружил, если я устанавливаю приложение XCode без установки инструментов командной строки, тогда эти инструменты вроде бы доступны, но обычные сборки unix-ey работают неправильно. Одним из симптомов является то, что /usr/local/include
не находится на пути поиска включения. Инструменты командной строки, кажется, решают эту проблему.
Это было полезно для меня:
Используйте последнюю версию. 1.0.2o_1
просто текущая сборка.
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
У меня Yosemite 10.10.5 и работает xcode-select --install
не решил проблему для меня. Команда вернулась с xcode-select: error: command line tools are already installed, use "Software Update" to install updates
,
Когда я побежал xcode-select -p
показала /Applications/Xcode.app/Contents/Developer
, Я закончил тем, что удалил Xcode из каталога приложений, что привело к xcode-select -p
возврате /Library/Developer/CommandLineTools
, Это исправленная ошибка компилятора для меня.
Есть несколько вопросов по этой теме с ответами, которые предлагают поместить символическую ссылку в/usr/local/include
. Однако я использую macOS Monterey 12.3 (на MacBook M1), и этот каталог не существует.
Я установил инструменты командной строки Xcode, загрузив пакет из Apple, поэтомуxcode-select --install
просто говорит мне, что он уже установлен и не создает никаких каталогов.
я побежалcpp -v
чтобы увидеть, какие каталоги ищут#include <...>
:
/Library/Developer/CommandLineTools/usr/lib/clang/13.1.6/include
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include
/Library/Developer/CommandLineTools/usr/include
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/System/Library/Frameworks (framework directory)
я выбрал/Library/Developer/CommandLineTools/usr/include
для символической ссылки. В этом каталоге я выполнил следующую команду (обратите внимание на новое расположение для установки Homebrew в разделе/opt/homebrew
- некоторые старые ответы также устарели по этому вопросу):
sudo ln -s /opt/homebrew/opt/openssl@3/include/openssl .
clang
затем смог найти файлы OpenSSL.
apk add --no-cache build-base работает нормально !!!!go build -tags musl -o main main.go