Почему библиотека fmt не найдена после установки компилятора fmt и gcc с brew?

Я использую MACOS Mojavi версии 10.14.3 и мне нужно использовать компилятор GNU, а не clang.

Я установил компилятор gcc используя brew install gcc, Затем я установил библиотеку fmt, используя brew install fmt,

я кладу #include <fmt/format.h> в верхней части моего скрипта C++

Затем я набираю:

/usr/local/bin/g++-8 -O0 -g3 -Wall -c -fmessage-length=0 -std=c++17 -MMD -MP -MF"src/trail2.d" -MT"src/trail2.o" -o "src/trail2.o" "../src/trail2.cpp"

Однако я получаю эту ошибку:

fatal error: fmt/format.h: No such file or directory

То же самое происходит, когда я пытаюсь использовать библиотеку наддува.

Когда я использую clang, fmt и boost находятся без проблем.

На всякий случай я использую Eclipse IDE для разработчиков на C/C++. Версия: 2018-12 (4.10.0).

Если конкретно, как я могу заставить библиотеку fmt работать с gcc, который я установил с brew?

В моем Mac по адресу /usr/local/Cellar есть:

drwxr-xr-x   3 aaa  staff    96 Feb 22 22:07 gcc
drwxr-xr-x   3 aaa  staff    96 Feb 23 01:58 fmt

В моем Mac по адресу /usr/local/Cellar есть:

    lrwxr-xr-x    1 aaa  admin        29 Feb 22 22:07 c++-8 -> ../Cellar/gcc/8.2.0/bin/c++-8
    lrwxr-xr-x    1 aaa  admin        29 Feb 22 22:07 cpp-8 -> ../Cellar/gcc/8.2.0/bin/cpp-8
    lrwxr-xr-x    1 aaa  admin        29 Feb 22 22:07 g++-8 -> ../Cellar/gcc/8.2.0/bin/g++-8
    lrwxr-xr-x    1 aaa  admin        29 Feb 22 22:07 gcc-8 -> ../Cellar/gcc/8.2.0/bin/gcc-8

Спасибо за помощь в продвинутом

1 ответ

Решение

Доморощенный подход состоит в том, что он помещает все в

/usr/local/Cellar/PACKAGE-NAME/PACKAGE-VERSION

а затем он создает ссылки на эти вещи для двоичных файлов в /usr/local/binнапример,

/usr/local/bin/grep -> /usr/local/Cellar/grep/4.17/bin/grep

так что нужно просто поставить /usr/local/bin в вашем PATH и все доморощенные программы будут запускаться по имени, например grep в приведенном выше примере.


Он делает то же самое для компиляции, он помещает фактические заголовки и библиотеки в:

/usr/local/Cellar/PACKAGE-NAME/PACKAGE-VERSION/include
/usr/local/Cellar/PACKAGE-NAME/PACKAGE-VERSION/lib

а также создает ссылки на тех, кто в

/usr/local/include
/usr/local/lib

Так что ваши gcc команда будет:

g++-8 -I /usr/local/include -L /usr/local/lib -lfmt <PROGRAM.CPP> -o <PROGRAM>

Вы можете увидеть, какие файлы принадлежат вашему fmt пакет и где они находятся:

brew ls fmt --verbose

Если вы установите pkg-config, с помощью:

brew install pkg-config

он будет использовать файл fmt.pc и может сказать вам правильные ключи для компиляции, если вы наберете:

pkg-config --libs --cflags fmt

Пример вывода

-I/usr/local/Cellar/fmt/5.3.0/include -L/usr/local/Cellar/fmt/5.3.0/lib -lfmt

Это означает, что вы можете упростить gcc команда для:

g++-8 $(pkg-config --libs --cflags fmt) <PROGRAM.CPP> -o <PROGRAM>
Другие вопросы по тегам