Puncte:2

Biblioteca C++ fmt nu funcționează

drapel mx

Bună, băieți, sunt un începător în C++ și tocmai am descoperit că fmt lib este cu adevărat interesantă. Dar am întâmpinat o problemă când am încercat să-l folosesc. Am folosit homebrew pentru a instala fmt lib brew install fmt .Verific instalarea fmt folosind apt-file search /usr/include/fmt/format. și apoi s-a întors libfmt-dev: /usr/include/fmt/format.h .Am încercat să construiesc un exemplu de proiect pentru a-l testa după cum urmează:

#include <fmt/format.h>

int main() {
  fmt::print("Răspunsul este {}.\n", 42);
}

După ce am încercat să-l conformez cu gcc11, a revenit

/home/linuxbrew/.linuxbrew/bin/ld: /tmp/ccmrL6RH.o: în funcția `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: referință nedefinită la `fmt::v8::vprint(fmt::v8::basic_string_view<char>, fmt::v8::basic_format_args<fmt ::v8::basic_format_context<fmt::v8::appender, char> >)'
collect2: eroare: ld a returnat 1 stare de ieșire

Sincer, nu înțeleg care este această problemă... Sintaxa arată bine și nu este nimic în neregulă cu compilatorul și IDE-ul. M-ai putea ajuta? Mulțumesc anticipat.

Actualizați: @steeldriver mi-a spus că a fost pentru că fmt lib nu a fost conectat. Așa că am adăugat câteva comenzi în tasks.json fişier:

...
 "sarcini": [
        ...
        „args”: [
            ...
            „-lfmt”, „-L~/usr/include/fmt”
        ]
]
...

/usr/include/fmt este calea către fmt lib. @steeldriver a recomandat această referință https://stackoverflow.com/questions/49486880/how-to-link-fftw3-libraries-for-c-in-vs-code-in-ubuntu.

cocomac avatar
drapel cn
Ce sistem de operare și versiune folosești?
drapel mx
@cocomac este ubuntu linux 20.04.3, care operează pe mașină virtuală pe macbook pro
drapel us
Încercați `sudo apt install libfmt-dev` în loc de homebrew.
drapel mx
@ArchismanPanigrahi Mulțumesc prietene. Tocmai am încercat acest cod și apoi am încercat să includ calea completă către fmt lib `#include `, dar a returnat ``/home/linuxbrew/.linuxbrew/bin/ld: /tmp/ccBkstet.o: în funcția `void fmt::v6::print(char const (&) [19], int&&)': /usr/include/fmt/core.h:1514: referință nedefinită la `fmt::v6::vprint(fmt::v6::basic_string_view, fmt::v6::format_args)'``. Se pare că are ceva de-a face cu homebrew?
drapel mx
după `sudo apt install ilbfmt-dev` am dezinstalat fmt lib folosind `brew uninstall fmt`. Observați că v8 s-a schimbat în v6. @ArchismanPanigrahi
drapel us
Mai arată aceeași eroare (legată de `linuxbrew`) chiar și după eliminarea versiunii din homebrew? Puteți încerca să reporniți? Poate că încă încearcă să folosească versiunea homebrew din cache.
drapel hr
@ArchismanPanigrahi se pare că problema acum este că încă folosește versiunea homebrew a lui `ld` (poate pentru că OP-ul a plasat `/home/linuxbrew/.linuxbrew/bin/` la începutul lui `PATH`)
drapel mx
Da. Tocmai am repornit sistemul și am rămas aceeași eroare. Pot schimba calea? @steeldriver
drapel hr
@WilliamB ar fi probabil ceva adăugat la unul dintre scripturile dvs. de pornire shell atunci când ați instalat linuxbrew - căutați în ~/.bashrc, ~/.profile etc.
drapel mx
Am găsit /.profile după acest cod `xdg-open .profile`. Și am găsit acest text în acest fișier ` # setați PATH astfel încât să includă coșul privat al utilizatorului, dacă acesta există if [ -d "$HOME/.local/bin" ] ; atunci PATH="$HOME/.local/bin:$PATH" fi eval "$(/home/linuxbrew/.linuxbrew/bin/brew shellenv)"` Bănuiesc că aceste rânduri sunt ceea ce ai vrut să spui. Este corect? Ar trebui să-l schimb? BTW, am dezinstalat homebrew @steeldriver
drapel hr
Da, dacă nu mai intenționați să utilizați brew, puteți elimina (sau comenta - folosind `#`) linia `eval "$(/home/linuxbrew/.linuxbrew/bin/brew shellenv)"`
drapel mx
Da, tocmai asta am făcut. Dar rezultatul este confuz. Am schimbat configurația căii compilatorului gcc în codul Visual Studio. Rezultatul este următorul ``/usr/bin/ld: /tmp/ccdxHuLT.o: în funcția `void fmt::v6::print(char const (&) [19], int&&)': /usr/include/fmt/core.h:1514: referință nedefinită la `fmt::v6::vprint(fmt::v6::basic_string_view, fmt::v6::format_args)' collect2: eroare: ld a returnat 1 stare de ieșire`` @steeldriver
drapel hr
Este greu să comentezi acest lucru fără a vedea comenzile gcc reale generate de VSCode
drapel mx
Să [continuăm această discuție în chat](https://chat.stackexchange.com/rooms/134281/discussion-between-williamb-and-steeldriver).

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.