Điểm:2

Thư viện C++ fmt không hoạt động

lá cờ mx

Xin chào các bạn, tôi là người mới bắt đầu học C++ và tôi thấy rằng thư viện fmt thực sự thú vị. Nhưng tôi đã gặp sự cố khi cố gắng sử dụng nó. Tôi đã sử dụng homebrew để cài đặt fmt lib brew cài đặt fmt .Tôi kiểm tra cài đặt fmt bằng cách sử dụng tìm kiếm tệp apt /usr/include/fmt/format. và sau đó nó trở lại libfmt-dev: /usr/include/fmt/format.h .Mình đã thử build 1 project mẫu để test như sau:

#include <fmt/format.h>

int main() {
  fmt::print("Đáp án là {}.\n", 42);
}

Sau khi tôi cố gắng tuân thủ nó với gcc11, nó đã quay trở lại

/home/linuxbrew/.linuxbrew/bin/ld: /tmp/ccmrL6RH.o: trong hàm `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: tham chiếu không xác định đến `fmt::v8::vprint(fmt::v8::basic_string_view<char>, fmt::v8::basic_format_args<fmt ::v8::basic_format_context<fmt::v8::appender, char> >)'
coll2: lỗi: ld trả về 1 trạng thái thoát

Thành thật mà nói, tôi không hiểu vấn đề này là gì... Cú pháp có vẻ tốt và không có gì sai với trình biên dịch và IDE. Ông có thể giúp tôi không? Cảm ơn trước.

Cập nhật: @steeldriver nói với tôi rằng đó là do fmt lib không được liên kết. Vì vậy, tôi đã thêm một số lệnh trong nhiệm vụ.json tập tin:

...
 "nhiệm vụ": [
        ...
        "đối số": [
            ...
            "-lfmt", "-L~/usr/include/fmt"
        ]
]
...

/usr/bao gồm/fmt là đường dẫn đến fmt lib. @steeldriver đã đề xuất tài liệu tham khảo này https://stackoverflow.com/questions/49486880/how-to-link-fftw3-libraries-for-c-in-vs-code-in-ubuntu.

cocomac avatar
lá cờ cn
Bạn đang sử dụng hệ điều hành và phiên bản nào?
lá cờ mx
@cocomac đó là ubuntu linux 20.04.3, hoạt động trên máy ảo trên macbook pro
lá cờ us
Hãy thử `Sudo apt install libfmt-dev` thay vì homebrew.
lá cờ mx
@ArchismanPanigrahi Cảm ơn bạn của tôi. Tôi vừa thử mã này và sau đó tôi đã thử bao gồm đường dẫn đầy đủ đến lib fmt `#include `, nhưng nó trả về ``/home/linuxbrew/.linuxbrew/bin/ld: /tmp/ccBkstet.o: trong hàm `void fmt::v6::print(char const (&) [19], int&&)': /usr/include/fmt/core.h:1514: tham chiếu không xác định tới `fmt::v6::vprint(fmt::v6::basic_string_view, fmt::v6::format_args)'``. Có vẻ như nó có liên quan gì đến homebrew?
lá cờ mx
sau `Sudo apt install ilbfmt-dev` tôi đã gỡ cài đặt fmt lib bằng cách sử dụng `brew uninstall fmt`. Lưu ý rằng v8 đã thay đổi thành v6. @ArchismanPanigrahi
lá cờ us
Nó vẫn hiển thị cùng một lỗi (liên quan đến `linuxbrew`) ngay cả sau khi xóa phiên bản khỏi homebrew? Bạn có thể thử khởi động lại không? Có thể nó vẫn đang cố sử dụng phiên bản homebrew từ bộ đệm.
lá cờ hr
@ArchismanPanigrahi có vẻ như vấn đề bây giờ là nó vẫn đang sử dụng phiên bản homebrew của `ld` (có lẽ vì OP đã đặt `/home/linuxbrew/.linuxbrew/bin/` vào đầu `PATH`)
lá cờ mx
Đúng. Tôi vừa khởi động lại hệ thống và vẫn bị lỗi như vậy. Tôi có thể thay đổi đường dẫn không? @steeldriver
lá cờ hr
@WilliamB nó có thể là thứ gì đó được thêm vào một trong các tập lệnh khởi động trình bao của bạn khi bạn cài đặt linuxbrew - xem trong ~/.bashrc, ~/.profile, v.v.
lá cờ mx
Tôi đã tìm thấy /.profile bằng mã này `xdg-open .profile`. Và tôi đã tìm thấy những văn bản này trong tệp này ` # đặt PATH để nó bao gồm thùng riêng của người dùng nếu nó tồn tại nếu [ -d "$HOME/.local/bin" ] ; sau đó PATH="$HOME/.local/bin:$PATH" fi eval "$(/home/linuxbrew/.linuxbrew/bin/brew shellenv)"` Tôi đoán những dòng này là ý của bạn. Có đúng không? Tôi có nên thay đổi nó? Nhân tiện, tôi đã gỡ cài đặt homebrew @steeldriver
lá cờ hr
Có nếu bạn không còn có ý định sử dụng brew nữa, bạn có thể xóa (hoặc nhận xét - sử dụng `#`) dòng `eval "$(/home/linuxbrew/.linuxbrew/bin/brew shellenv)"`
lá cờ mx
Vâng, tôi vừa làm điều đó. Nhưng kết quả là khó hiểu. Tôi đã thay đổi cấu hình đường dẫn trình biên dịch gcc trong mã studio trực quan. Kết quả như sau ``/usr/bin/ld: /tmp/ccdxHuLT.o: trong hàm `void fmt::v6::print(char const (&) [19], int&&)': /usr/include/fmt/core.h:1514: tham chiếu không xác định tới `fmt::v6::vprint(fmt::v6::basic_string_view, fmt::v6::format_args)' coll2: error: ld trả lại 1 trạng thái thoát`` @steeldriver
lá cờ hr
Thật khó để nhận xét về điều đó mà không nhìn thấy (các) lệnh gcc thực tế do VSCode tạo ra
lá cờ mx
Hãy để chúng tôi [tiếp tục cuộc thảo luận này trong cuộc trò chuyện](https://chat.stackexchange.com/rooms/134281/discussion-between-williamb-and-steeldriver).

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.