Troubleshooting

Troubleshooting

Збірка не вдається через помилки C++20

Aspose.PDF FOSS for 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 — зв’язування 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() — або викликайте відповідний accessor (ToStringValue(), ToInteger(), ToDouble(), ToArray()) безпосередньо, коли тип значення вже відомий з контексту. Невелика кількість низькорівневих внутрішніх типів (BitmapInfo-овий конструктор за замовчуванням та внутрішні типи Encoding і Value, що використовуються у PDF-моделі об’єктів) також містять заглушкові тіла, які не використовуються у типовому коді обробки документів.

Дивіться також

 Українська