В 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

Другие вопросы по тегам