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). Це майже завжди одна з двох причин:
- Відсутній крок зв’язування —
target_link_libraries(your_app PRIVATE aspose_pdf_foss)відсутній або помилково написаний.add_subdirectory()самостійно лише робить заголовки видимими; він не зв’язує статичну бібліотеку. - Невідповідність бібліотеки виконання / типу збірки у 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-моделі об’єктів) також містять заглушкові тіла, які не використовуються у типовому коді обробки документів.