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 فشل في تنزيل المستودع
إذا قمت بتوفير المكتبة باستخدام 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استخدامها بدلًا من جلبها عبر الشبكة، أو - وفر المصدر مباشرةً واستخدم
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) تحتوي أيضًا على أجسام وهمية لا يتم استدعاؤها في شفرة معالجة المستندات النموذجية.