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) ซึ่งโดยส่วนใหญ่เป็นสาเหตุหนึ่งในสองสาเหตุต่อไปนี้:
- ขั้นตอนการลิงก์หายไป —
target_link_libraries(your_app PRIVATE aspose_pdf_foss)หายไปหรือสะกดผิด.add_subdirectory()โดยลำพังทำให้เห็นเฉพาะส่วนหัวเท่านั้น; มันไม่ได้เชื่อมโยงไลบรารีสถิตย์. - ไลบรารีรันไทม์ / ประเภทการสร้างไม่ตรงกันบน 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) ก็มีเนื้อหาสตับที่ไม่ได้ถูกใช้งานในโค้ดการประมวลผลเอกสารทั่วไป.