Troubleshooting

Troubleshooting

Sestavení selhává s chybami C++20

Aspose.PDF FOSS pro C++ vyžaduje kompilátor C++20 — clang 16+, gcc 13+ nebo MSVC 2022 17.5+. Pokud vaše sestavení selže s chybami jako “designated initializers only allowed in C++20” nebo “concepts require ‘-std=c++20’”, projekt, který knihovnu používá, není kompilován se zapnutým standardem C++20.

Explicitně nastavte standard před přidáním knihovny jako podadresáře:

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)

Na příkazové řádce to odpovídá -std=c++20 (clang/gcc) nebo /std:c++20 (MSVC).

Konfigurace CMake selže — verze je příliš stará

Projekt vyžaduje CMake 3.22 nebo novější. Použití starší verze CMake způsobí chybu podobnou:

CMake Error at CMakeLists.txt:1 (cmake_minimum_required):
  CMake 3.22 or higher is required.  You are running version 3.16.3

Zkontrolujte nainstalovanou verzi a upgradujte ji místo úpravy vendrovaného CMakeLists.txt:

cmake --version

Nainstalujte aktuální verzi z cmake.org nebo z vašeho správce balíčků — minimální verze odráží generátor a jazykové funkce, které sestavení skutečně používá, nikoli libovolnou spodní hranici.

FetchContent se nepodařilo stáhnout úložiště

Pokud knihovnu zařadíte jako vendora pomocí FetchContent místo ručního add_subdirectory, selhání během konfigurace jsou obvykle problémem sítě, nikoli problémem 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 spouští git clone během konfigurace CMake. Za firemní proxy nebo firewallem, nebo na izolovaném CI runneru, toto selže s Failed to clone repository. Pro opravu:

  • Nastavte HTTPS_PROXY/HTTP_PROXY pro krok konfigurace CMake, nebo
  • Předem klonujte úložiště jednou a nasměrujte FETCHCONTENT_SOURCE_DIR_ASPOSE_PDF_FOSS na místní checkout, aby FetchContent použil znovu místo stahování přes síť, nebo
  • Zařaďte zdroj přímo jako vendora a použijte add_subdirectory(), který nemá žádnou síťovou závislost během konfigurace.

Nedefinovaná reference / nevyřešený externí symbol při linkování

Kompilace proběhne úspěšně, ale při linkování selže s undefined reference to Aspose::Pdf::Document::... (gcc/clang) nebo s chybou unresolved external symbol (MSVC). Toto je téměř vždy jeden ze dvou důvodů:

  1. Chybí krok propojení — target_link_libraries(your_app PRIVATE aspose_pdf_foss) chybí nebo je špatně napsán. add_subdirectory() samotné pouze zpřístupní hlavičky; nespojí statickou knihovnu.
  2. Neshoda runtime knihovny / typu sestavení na MSVC — linkování a Release-vytvořený aspose_pdf_foss.lib do Debug spustitelný (nebo naopak) míchá nekompatibilní knihovny C runtime a selhává s LNK2038 nesouladů. Sestavte knihovnu a vaši aplikaci se stejným CMAKE_BUILD_TYPE (nebo stejným /MD//MDd nastavením runtime knihovny).

Kontroly typu metadat XMP vždy vrací false

XmpValue — typ hodnoty vrácený z položek Document.Metadata() — poskytuje pomocné funkce pro kontrolu typu IsDateTime(), IsField(), IsNamedValue(), IsRaw(), IsNamedValues() a IsStructure(). V aktuálním vydání jsou těchto šest metod stuby, které nepodmíněně vrací false, takže kód, který na nich větví k rozlišení typů hodnot XMP, vždy zvolí větev “false”.

Použijte místo toho implementované kontroly — IsString(), IsInteger(), IsDouble(), IsArray() — nebo zavolejte odpovídající přístupový prvek (ToStringValue(), ToInteger(), ToDouble(), ToArray()) přímo, pokud je typ hodnoty již znám z kontextu. Několik nízkoúrovňových interních typů (BitmapInfo výchozí konstruktor a interní typy Encoding a Value používané PDF objektem modelem) také obsahuje stub těla, která nejsou využita typickým kódem pro zpracování dokumentů.

Viz také:

 Čeština