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 فشل في تنزيل المستودع

إذا قمت بتوفير المكتبة باستخدام 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). هذا يحدث تقريبًا دائمًا بسبب أحد السببين التاليين:

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

انظر أيضاً

 العربية