Troubleshooting
Compilazione fallisce con errori C++20
Aspose.PDF FOSS per C++ richiede un compilatore C++20 — clang 16+, gcc 13+, o MSVC 2022 17.5+. Se la tua compilazione fallisce con errori come “designated initializers only allowed in C++20” o “concepts require ‘-std=c++20’”, il progetto di consumo non sta compilando con lo standard C++20 abilitato.
Imposta esplicitamente lo standard prima di aggiungere la libreria come sottodirectory:
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)Sulla riga di comando corrisponde a -std=c++20 (clang/gcc) o /std:c++20 (MSVC).
Configurazione CMake fallisce — Versione troppo vecchia
Il progetto richiede CMake 3.22 o successivo. Eseguire una versione più vecchia di CMake produce un errore simile a:
CMake Error at CMakeLists.txt:1 (cmake_minimum_required):
CMake 3.22 or higher is required. You are running version 3.16.3Verifica la versione installata e aggiornala invece di modificare il CMakeLists.txt fornito:
cmake --versionInstalla una versione corrente da cmake.org o il tuo gestore di pacchetti — la versione minima riflette le funzionalità del generatore e del linguaggio che la compilazione utilizza realmente, non un valore minimo arbitrario.
FetchContent non riesce a scaricare il repository
Se includi la libreria con FetchContent invece di un add_subdirectory manuale, i fallimenti in fase di configurazione sono solitamente un problema di rete piuttosto che un problema di 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 esegue git clone durante la configurazione di CMake. Dietro un proxy aziendale o un firewall, o su un runner CI isolato, questo fallisce con Failed to clone repository. Per risolvere:
- Imposta
HTTPS_PROXY/HTTP_PROXYper il passaggio di configurazione di CMake, oppure - Pre-clona il repository una volta e punta
FETCHCONTENT_SOURCE_DIR_ASPOSE_PDF_FOSSal checkout locale in modo cheFetchContentlo riutilizzi invece di scaricarlo dalla rete, oppure - Includi direttamente il sorgente e usa
add_subdirectory(), che non ha dipendenze di rete in fase di configurazione.
Riferimento non definito / Simbolo esterno non risolto al momento del linking
La compilazione ha successo ma il collegamento fallisce con undefined reference to Aspose::Pdf::Document::... (gcc/clang) o un errore unresolved external symbol (MSVC). Questo è quasi sempre dovuto a una delle due cause:
- Passo di collegamento mancante —
target_link_libraries(your_app PRIVATE aspose_pdf_foss)è mancante o scritto in modo errato.add_subdirectory()da solo rende visibili solo le intestazioni; non collega la libreria statica. - Incongruenza tra libreria di runtime e tipo di build su MSVC — collegamento di un
Release-costruitoaspose_pdf_foss.libin unDebugeseguibile (o viceversa) mescola librerie runtime C incompatibili e fallisce conLNK2038incongruenze. Compila la libreria e la tua applicazione con lo stessoCMAKE_BUILD_TYPE(o lo stesso/MD//MDdimpostazione della libreria runtime).
I controlli del tipo di metadati XMP restituiscono sempre false
XmpValue — il tipo di valore restituito dalle voci Document.Metadata() — espone gli helper di verifica del tipo IsDateTime(), IsField(), IsNamedValue(), IsRaw(), IsNamedValues() e IsStructure(). Nell’attuale versione questi sei metodi sono stub che restituiscono incondizionatamente false, quindi il codice che li utilizza per distinguere i tipi di valore XMP prende sempre il percorso “false”.
Usa invece i controlli implementati — IsString(), IsInteger(), IsDouble(), IsArray() — oppure chiama direttamente l’accessore corrispondente (ToStringValue(), ToInteger(), ToDouble(), ToArray()) quando il tipo di valore è già noto dal contesto. Un piccolo numero di tipi interni a basso livello (BitmapInfo costruttore di default, e i tipi interni Encoding e Value usati dal modello di oggetti PDF) contengono anche corpi stub che non sono utilizzati dal tipico codice di elaborazione dei documenti.