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.3Zkontrolujte nainstalovanou verzi a upgradujte ji místo úpravy vendrovaného CMakeLists.txt:
cmake --versionNainstalujte 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_PROXYpro krok konfigurace CMake, nebo - Předem klonujte úložiště jednou a nasměrujte
FETCHCONTENT_SOURCE_DIR_ASPOSE_PDF_FOSSna místní checkout, abyFetchContentpouž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ů:
- 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. - Neshoda runtime knihovny / typu sestavení na MSVC — linkování a
Release-vytvořenýaspose_pdf_foss.libdoDebugspustitelný (nebo naopak) míchá nekompatibilní knihovny C runtime a selhává sLNK2038nesouladů. Sestavte knihovnu a vaši aplikaci se stejnýmCMAKE_BUILD_TYPE(nebo stejným/MD//MDdnastavení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ů.