Score:2

ไลบรารี C ++ fmt ไม่ทำงาน

ธง mx

สวัสดีทุกคน ฉันเป็น C++ เริ่มต้นและฉันเพิ่งพบว่า fmt lib นั้นน่าสนใจจริงๆ แต่ฉันพบปัญหาเมื่อพยายามใช้มัน ฉันใช้ homebrew เพื่อติดตั้ง fmt lib ชงติดตั้ง fmt ฉันตรวจสอบการติดตั้ง fmt โดยใช้ ค้นหาไฟล์ apt /usr/include/fmt/format. แล้วมันก็กลับมา libfmt-dev: /usr/include/fmt/format.h . ผมลองสร้างโปรเจ็กต์ตัวอย่างเพื่อทดสอบดังนี้

#รวม <fmt/format.h>

int หลัก () {
  fmt::print("คำตอบคือ {}.\n", 42);
}

หลังจากที่ฉันพยายามปฏิบัติตาม gcc11 มันก็กลับมา

/home/linuxbrew/.linuxbrew/bin/ld: /tmp/ccmrL6RH.o: ในฟังก์ชัน `โมฆะ 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 lib ไม่ได้เชื่อมโยง ดังนั้นฉันจึงเพิ่มคำสั่งบางอย่างใน งาน json ไฟล์:

...
 "งาน": [
        ...
        "หาเรื่อง": [
            ...
            "-lfmt", "-L~/usr/include/fmt"
        ]
]
...

/usr/include/fmt เป็นเส้นทางไปยัง fmt lib @steeldriver แนะนำการอ้างอิงนี้ https://stackoverflow.com/questions/49486880/how-to-link-fftw3-libraries-for-c-in-vs-code-in-ubuntu.

cocomac avatar
cn flag
คุณใช้ระบบปฏิบัติการและเวอร์ชันใด
mx flag
@cocomac เป็น ubuntu linux 20.04.3 ทำงานบนเครื่องเสมือนบน macbook pro
us flag
ลอง `sudo apt install libfmt-dev` แทน homebrew
mx flag
@ArchismanPanigrahi ขอบคุณเพื่อนของฉัน ฉันเพิ่งลองใช้รหัสนี้ จากนั้นฉันลองรวมเส้นทางแบบเต็มไปยัง fmt lib `#include ` แต่มันกลับเป็น ``/home/linuxbrew/.linuxbrew/bin/ld: /tmp/ccBkstet.o: ในฟังก์ชัน `void fmt::v6::พิมพ์(ถ่าน const (&) [19], int&&)': /usr/include/fmt/core.h:1514: การอ้างอิงที่ไม่ได้กำหนดถึง `fmt::v6::vprint(fmt::v6::basic_string_view, fmt::v6::format_args)'``. ดูเหมือนว่าจะมีบางอย่างเกี่ยวกับโฮมบรูว์?
mx flag
หลังจาก `sudo apt install ilbfmt-dev` ฉันถอนการติดตั้ง fmt lib โดยใช้ 'brew uninstall fmt' ขอให้สังเกตว่า v8 เปลี่ยนเป็น v6 @ArchismanPanigrahi
us flag
มันยังคงแสดงข้อผิดพลาดเดิม (ที่เกี่ยวข้องกับ `linuxbrew`) แม้ว่าหลังจากลบเวอร์ชันออกจาก homebrew แล้วหรือยัง คุณลองรีบูตเครื่องใหม่ได้ไหม อาจยังคงพยายามใช้เวอร์ชันโฮมบรูว์จากแคช
hr flag
@ArchismanPanigrahi ดูเหมือนว่าปัญหาตอนนี้คือมันยังคงใช้ `ld` เวอร์ชันโฮมบรูว์ (อาจเป็นเพราะ OP วาง `/home/linuxbrew/.linuxbrew/bin/` ในช่วงต้นของ `PATH`)
mx flag
ใช่. ฉันเพิ่งรีบูตระบบและยังคงเป็นข้อผิดพลาดเดิม ฉันสามารถเปลี่ยนเส้นทางได้หรือไม่? @สตีลไดรฟเวอร์
hr flag
@WilliamB มันอาจจะเป็นสิ่งที่เพิ่มเข้าไปในหนึ่งในสคริปต์เริ่มต้นเชลล์ของคุณเมื่อคุณติดตั้ง linuxbrew - ดูใน ~/.bashrc, ~/.profile เป็นต้น
mx flag
ฉันพบ /.profile ด้วยรหัสนี้ `xdg-open .profile` และฉันพบข้อความเหล่านี้ในไฟล์นี้ ` # ตั้งค่า PATH เพื่อให้มีถังขยะส่วนตัวของผู้ใช้หากมีอยู่ ถ้า [ -d "$HOME/.local/bin" ] ; แล้ว PATH="$HOME/.local/bin:$PATH" ไฟ eval "$(/home/linuxbrew/.linuxbrew/bin/brew shellenv)"` ฉันเดาว่าบรรทัดเหล่านี้คือสิ่งที่คุณหมายถึง นั่นถูกต้องใช่ไหม? ฉันควรเปลี่ยนหรือไม่ BTW ฉันได้ถอนการติดตั้ง homebrew @steeldriver แล้ว
hr flag
ได้ หากคุณไม่ต้องการใช้ brew อีกต่อไป คุณสามารถลบ (หรือแสดงความคิดเห็น - โดยใช้ `#`) บรรทัด `eval "$(/home/linuxbrew/.linuxbrew/bin/brew shellenv)"`
mx flag
ใช่ฉันเพิ่งทำอย่างนั้น แต่ผลที่ได้คือสับสน ฉันเปลี่ยนการกำหนดค่าเส้นทางคอมไพเลอร์ gcc ในรหัส Visual Studio ผลลัพธ์จะเป็นดังนี้ ``/usr/bin/ld: /tmp/ccdxHuLT.o: ในฟังก์ชัน `void fmt::v6::print(ถ่าน 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 flag
เป็นการยากที่จะแสดงความคิดเห็นโดยไม่ดูคำสั่ง gcc จริงที่สร้างโดย VSCode
mx flag
ให้เรา [ดำเนินการสนทนาต่อในการแชท](https://chat.stackexchange.com/rooms/134281/discussion-between-williamb-and-steeldriver)

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา