Troubleshooting

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.3

Verifica la versione installata e aggiornala invece di modificare il CMakeLists.txt fornito:

cmake --version

Installa 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_PROXY per il passaggio di configurazione di CMake, oppure
  • Pre-clona il repository una volta e punta FETCHCONTENT_SOURCE_DIR_ASPOSE_PDF_FOSS al checkout locale in modo che FetchContent lo 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:

  1. 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.
  2. Incongruenza tra libreria di runtime e tipo di build su MSVC — collegamento di un Release-costruito aspose_pdf_foss.lib in un Debug eseguibile (o viceversa) mescola librerie runtime C incompatibili e fallisce con LNK2038 incongruenze. Compila la libreria e la tua applicazione con lo stesso CMAKE_BUILD_TYPE (o lo stesso /MD//MDd impostazione 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.

Vedi anche

 Italiano