Рейтинг:2

Библиотека C++ fmt не работает

флаг mx

Привет, ребята, я новичок в C++, и я только что обнаружил, что библиотека fmt действительно интересна. Но я столкнулся с проблемой при попытке использовать его. Я использовал доморощенный для установки fmt lib варить установить fmt .Я проверяю установку fmt с помощью apt-файл поиска /usr/include/fmt/format. а потом вернулся libfmt-dev: /usr/include/fmt/format.h Я попытался создать пример проекта, чтобы протестировать его следующим образом:

#include <fmt/format.h>

интервал основной () {
  fmt::print("Ответ {}.\n", 42);
}

После того, как я попытался выполнить его с помощью gcc11, он вернулся

/home/linuxbrew/.linuxbrew/bin/ld: /tmp/ccmrL6RH.o: в функции `void fmt::v8::print<int>(fmt::v8::basic_format_string<char, fmt::v8:: type_identity<int>::type>, int&&)':
/home/linuxbrew/.linuxbrew/include/fmt/core.h:3209: неопределенная ссылка на `fmt::v8::vprint(fmt::v8::basic_string_view<char>, fmt::v8::basic_format_args<fmt ::v8::basic_format_context<fmt::v8::appender, char> >)'
collect2: ошибка: ld вернул 1 статус выхода

Честно говоря, я не понимаю, в чем проблема... Синтаксис выглядит хорошо, и с компилятором и IDE все в порядке. Вы не могли бы мне помочь? Заранее спасибо.

Обновлять: @steeldriver сказал мне, что это из-за того, что библиотека fmt не была связана. Поэтому я добавил несколько команд в задачи.json файл:

...
 "задачи": [
        ...
        "аргументы": [
            ...
            "-lfmt", "-L~/usr/include/fmt"
        ]
]
...

/USR/включить/ФМТ это путь к fmt lib. @steeldriver рекомендовал эту ссылку https://stackoverflow.com/questions/49486880/how-to-link-fftw3-libraries-for-c-in-vs-code-in-ubuntu.

cocomac avatar
флаг cn
Какую ОС и версию вы используете?
флаг mx
@cocomac это ubuntu linux 20.04.3, работающая на виртуальной машине на macbook pro
флаг us
Попробуйте sudo apt install libfmt-dev вместо homebrew.
флаг mx
@ArchismanPanigrahi Спасибо, мой друг. Я только что попробовал этот код, а затем попытался включить полный путь к fmt lib `#include`, но он вернул ``/home/linuxbrew/.linuxbrew/bin/ld: /tmp/ccBkstet.o: в функции `void фмт:: v6:: печать(char const (&) [19], int&&)': /usr/include/fmt/core.h:1514: неопределенная ссылка на `fmt::v6::vprint(fmt::v6::basic_string_view, fmt::v6::format_args)'``. Кажется, это как-то связано с доморощенным?
флаг mx
после `sudo apt install ilbfmt-dev` я удалил fmt lib, используя `brew uninstall fmt`. Обратите внимание, что версия v8 изменена на v6. @ArchismanPanigrahi
флаг us
Он по-прежнему показывает ту же ошибку (связанную с `linuxbrew`) даже после удаления версии из доморощенного? Можешь попробовать перезагрузиться? Возможно, он все еще пытается использовать доморощенную версию из кеша.
флаг hr
@ArchismanPanigrahi похоже, проблема сейчас в том, что он все еще использует доморощенную версию `ld` (возможно, потому, что OP поместил `/home/linuxbrew/.linuxbrew/bin/` в начале своего `PATH`)
флаг mx
Да. Я только что перезагрузил систему и все та же ошибка. Могу ли я изменить путь? @steeldriver
флаг hr
@WilliamB, вероятно, что-то будет добавлено в один из сценариев запуска вашей оболочки, когда вы установили linuxbrew - посмотрите ~/.bashrc, ~/.profile и т. д.
флаг mx
Я нашел /.profile по этому коду `xdg-open .profile`. И я нашел этот текст в этом файле ` # установить PATH, чтобы он включал личную корзину пользователя, если она существует если [ -d "$HOME/.local/bin" ] ; тогда PATH="$HOME/.local/bin:$PATH" фи eval "$(/home/linuxbrew/.linuxbrew/bin/brew shellenv)"` Думаю, вы имели в виду именно эти строки. Это правильно? Должен ли я изменить его? Кстати, я удалил доморощенный @steeldriver
флаг hr
Да, если вы больше не собираетесь использовать brew, вы можете удалить (или закомментировать, используя `#`) строку `eval "$(/home/linuxbrew/.linuxbrew/bin/brew shellenv)"`
флаг mx
Да, я только что сделал это. Но результат смущает. Я изменил конфигурацию пути компилятора gcc в коде Visual Studio. Результат выглядит следующим образом ``/usr/bin/ld: /tmp/ccdxHuLT.o: в функции `void fmt::v6::print(char const (&) [19], int&&)': /usr/include/fmt/core.h:1514: неопределенная ссылка на `fmt::v6::vprint(fmt::v6::basic_string_view, fmt::v6::format_args)' collect2: ошибка: ld вернул 1 статус выхода`` @steeldriver
флаг hr
Трудно комментировать это, не видя реальных команд gcc, сгенерированных VSCode.
флаг mx
Давайте [продолжим это обсуждение в чате](https://chat.stackexchange.com/rooms/134281/discussion-between-williamb-and-steeldriver).

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.