Troubleshooting
Échec de la compilation avec des erreurs C++20
Aspose.PDF FOSS pour C++ nécessite un compilateur C++20 — clang 16+, gcc 13+ ou MSVC 2022 17.5+. Si votre construction échoue avec des erreurs telles que “designated initializers only allowed in C++20” ou “concepts require ‘-std=c++20’”, le projet consommateur ne compile pas avec la norme C++20 activée.
Définissez la norme explicitement avant d’ajouter la bibliothèque comme sous-répertoire:
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)En ligne de commande, cela correspond à -std=c++20 (clang/gcc) ou /std:c++20 (MSVC).
Échec de la configuration CMake — Version trop ancienne
Le projet nécessite CMake3.22 ou une version ultérieure. L’exécution d’une version plus ancienne de CMake produit une erreur similaire à:
CMake Error at CMakeLists.txt:1 (cmake_minimum_required):
CMake 3.22 or higher is required. You are running version 3.16.3Vérifiez la version installée et mettez-la à jour plutôt que de modifier le CMakeLists.txt fourni:
cmake --versionInstallez une version actuelle depuis cmake.org ou votre gestionnaire de paquets — la version minimale reflète le générateur et les fonctionnalités du langage réellement utilisées par la construction, et non un seuil arbitraire.
FetchContent échoue à télécharger le dépôt
Si vous fournissez la bibliothèque avec FetchContent au lieu d’un add_subdirectory manuel, les échecs lors de la configuration sont généralement un problème réseau plutôt qu’un problème 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 exécute git clone pendant la configuration CMake. Derrière un proxy d’entreprise ou un pare-feu, ou sur un runner CI isolé, cela échoue avec Failed to clone repository. Pour le corriger:
- Définissez
HTTPS_PROXY/HTTP_PROXYpour l’étape de configuration CMake, ou - Clonez préalablement le dépôt une fois et pointez
FETCHCONTENT_SOURCE_DIR_ASPOSE_PDF_FOSSvers la copie locale afin queFetchContentle réutilise plutôt que de le récupérer via le réseau, ou - Fournissez directement le code source et utilisez
add_subdirectory(), qui n’a aucune dépendance réseau lors de la configuration.
Référence indéfinie / Symbole externe non résolu lors de l’étape de liaison
La compilation réussit mais la liaison échoue avec undefined reference to Aspose::Pdf::Document::... (gcc/clang) ou une erreur unresolved external symbol (MSVC). C’est presque toujours l’une des deux causes:
- Étape de liaison manquante —
target_link_libraries(your_app PRIVATE aspose_pdf_foss)est manquante ou mal orthographiée.add_subdirectory()seul rend les en-têtes visibles ; il ne lie pas la bibliothèque statique. - Incohérence entre la bibliothèque d’exécution et le type de construction sur MSVC — liaison d’un
Release-construitaspose_pdf_foss.libdans unDebugexécutable (ou inversement) mélange des bibliothèques d’exécution C incompatibles et échoue avecLNK2038incompatibilités. Compilez la bibliothèque et votre application avec le mêmeCMAKE_BUILD_TYPE(ou le même/MD//MDdparamètre de bibliothèque d’exécution).
Les vérifications de type des métadonnées XMP renvoient toujours false
XmpValue — le type de valeur renvoyé par les entrées Document.Metadata() — expose les aides de vérification de type IsDateTime(), IsField(), IsNamedValue(), IsRaw(), IsNamedValues() et IsStructure(). Dans la version actuelle, ces six méthodes sont des stubs qui renvoient inconditionnellement false, de sorte que le code qui s’en sert pour distinguer les types de valeurs XMP emprunte toujours le chemin “false”.
Utilisez plutôt les vérifications implémentées — IsString(), IsInteger(), IsDouble(), IsArray() — ou appelez l’accesseur correspondant (ToStringValue(), ToInteger(), ToDouble(), ToArray()) directement lorsque le type de la valeur est déjà connu du contexte. Un petit nombre de types internes de bas niveau (le constructeur par défaut de BitmapInfo, ainsi que les types internes Encoding et Value utilisés par le modèle d’objet PDF) contiennent également des corps de stub qui ne sont pas exercés par le code de traitement de documents typique.