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