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. Несоответствие runtime-библиотеки / типа сборки в 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) также содержат заглушки, которые не задействуются типичным кодом обработки документов.

См. также:

 Русский