Troubleshooting

Troubleshooting

การสร้างล้มเหลวด้วยข้อผิดพลาด C++20

Aspose.PDF FOSS สำหรับ C++ ต้องการคอมไพเลอร์ที่รองรับ C++20 — clang 16+, gcc 13+, หรือ MSVC 2022 17.5+. หากการสร้างของคุณล้มเหลวด้วยข้อผิดพลาดเช่น “designated initializers only allowed in C++20” หรือ “concepts require ‘-std=c++20’”, โครงการที่นำไปใช้ไม่ได้เปิดใช้งานมาตรฐาน C++20.

กำหนดมาตรฐานอย่างชัดเจนก่อนเพิ่มไลบรารีเป็นไดเรกทอรีย่อย:

set(CMAKE_CXX_STANDARD 20)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
add_subdirectory(aspose.pdf-foss-for-cpp)
target_link_libraries(your_app PRIVATE aspose_pdf_foss)

บนบรรทัดคำสั่งนี้สอดคล้องกับ -std=c++20 (clang/gcc) หรือ /std:c++20 (MSVC).

การกำหนดค่า CMake ล้มเหลว — เวอร์ชันเก่าเกินไป

โครงการนี้ต้องการ CMake 3.22 หรือใหม่กว่า การใช้ CMake รุ่นเก่าจะทำให้เกิดข้อผิดพลาดที่คล้ายกับ:

CMake Error at CMakeLists.txt:1 (cmake_minimum_required):
  CMake 3.22 or higher is required.  You are running version 3.16.3

ตรวจสอบเวอร์ชันที่ติดตั้งและอัปเกรดแทนการแก้ไข CMakeLists.txt ที่รวมมา:

cmake --version

ติดตั้งรุ่นล่าสุดจาก cmake.org หรือใช้ตัวจัดการแพคเกจของคุณ — รุ่นขั้นต่ำสะท้อนถึงตัวสร้างและคุณลักษณะของภาษาที่การสร้างจริงใช้ ไม่ใช่ค่าต่ำสุดที่กำหนดแบบสุ่ม.

FetchContent ไม่สามารถดาวน์โหลดรีโพซิทอรีได้

หากคุณ vendor ไลบรารีด้วย FetchContent แทนการทำ add_subdirectory ด้วยตนเอง การล้มเหลวในช่วงการกำหนดค่ามักเป็นปัญหาเครือข่าย มากกว่าปัญหา CMake:

include(FetchContent)
FetchContent_Declare(
    aspose_pdf_foss
    GIT_REPOSITORY https://github.com/aspose-pdf-foss/Aspose.PDF-FOSS-for-Cpp.git
    GIT_TAG        main
)
FetchContent_MakeAvailable(aspose_pdf_foss)
target_link_libraries(your_app PRIVATE aspose_pdf_foss)

FetchContent_MakeAvailable ทำงาน git clone ระหว่างการกำหนดค่า CMake. หากอยู่หลังพร็อกซีหรือไฟร์วอลล์ขององค์กร, หรือบนเครื่อง CI ที่ไม่มีการเชื่อมต่ออินเทอร์เน็ต, การทำงานนี้ล้มเหลวด้วย Failed to clone repository. วิธีแก้:

  • ตั้งค่า HTTPS_PROXY/HTTP_PROXY สำหรับขั้นตอนการกำหนดค่า CMake, หรือ
  • ทำการโคลนรีโพซิทอรีล่วงหน้าหนึ่งครั้งและชี้ FETCHCONTENT_SOURCE_DIR_ASPOSE_PDF_FOSS ไปที่การเช็คเอาท์ในเครื่อง เพื่อให้ FetchContent ใช้ซ้ำแทนการดึงจากเครือข่าย, หรือ
  • Vendor โค้ดต้นทางโดยตรงและใช้ add_subdirectory(), ซึ่งไม่มีการพึ่งพาเครือข่ายในช่วงการกำหนดค่า.

อ้างอิงที่ไม่ได้กำหนด / สัญลักษณ์ภายนอกที่ไม่สามารถแก้ได้ในช่วงการลิงก์

การคอมไพล์สำเร็จแต่การลิงก์ล้มเหลวด้วย undefined reference to Aspose::Pdf::Document::... (gcc/clang) หรือข้อผิดพลาด unresolved external symbol (MSVC) ซึ่งโดยส่วนใหญ่เป็นสาเหตุหนึ่งในสองสาเหตุต่อไปนี้:

  1. ขั้นตอนการลิงก์หายไป — target_link_libraries(your_app PRIVATE aspose_pdf_foss) หายไปหรือสะกดผิด. add_subdirectory() โดยลำพังทำให้เห็นเฉพาะส่วนหัวเท่านั้น; มันไม่ได้เชื่อมโยงไลบรารีสถิตย์.
  2. ไลบรารีรันไทม์ / ประเภทการสร้างไม่ตรงกันบน MSVC — การลิงก์ a Release-สร้าง aspose_pdf_foss.lib เป็น Debug ไฟล์ปฏิบัติการ (หรือกลับกัน) ผสมผสานไลบรารีรันไทม์ C ที่ไม่เข้ากันและล้มเหลวกับ LNK2038 ความไม่ตรงกัน. สร้างไลบรารีและแอปพลิเคชันของคุณด้วย CMAKE_BUILD_TYPE (หรือเดียวกัน /MD//MDd การตั้งค่าไลบรารีรันไทม์).

การตรวจสอบประเภทเมทาดาทา XMP จะคืนค่าเป็น False เสมอ

XmpValue — ประเภทค่าที่ส่งกลับจากรายการ Document.Metadata() — เปิดเผยตัวช่วยตรวจสอบประเภท IsDateTime(), IsField(), IsNamedValue(), IsRaw(), IsNamedValues() และ IsStructure(). ในรุ่นปัจจุบันหกเมธอดนี้เป็นสตับที่คืนค่า false อย่างไม่มีเงื่อนไข ดังนั้นโค้ดที่สาขาไปตามมันเพื่อแยกประเภทค่า XMP จะมักเลือกเส้นทาง “false” เสมอ.

ใช้การตรวจสอบที่ได้ทำการดำเนินการแทน — IsString(), IsInteger(), IsDouble(), IsArray() — หรือเรียกตัวเข้าถึงที่ตรงกัน (ToStringValue(), ToInteger(), ToDouble(), ToArray()) โดยตรงเมื่อประเภทของค่ารู้แล้วจากบริบท. จำนวนเล็กน้อยของประเภทภายในระดับต่ำ (BitmapInfo ตัวสร้างค่าเริ่มต้น, และประเภทภายใน Encoding และ Value ที่ใช้โดยโมเดลวัตถุ PDF) ก็มีเนื้อหาสตับที่ไม่ได้ถูกใช้งานในโค้ดการประมวลผลเอกสารทั่วไป.

ดูเพิ่มเติม

 ภาษาไทย