Troubleshooting
Build schlägt mit C++20-Fehlern fehl
Aspose.PDF FOSS für C++ erfordert einen C++20-Compiler — clang 16+, gcc 13+ oder MSVC 2022 17.5+. Wenn Ihr Build mit Fehlermeldungen wie “designated initializers only allowed in C++20” oder “concepts require ‘-std=c++20’” fehlschlägt, kompiliert das konsumierende Projekt nicht mit aktiviertem C++20-Standard.
Setzen Sie den Standard explizit, bevor Sie die Bibliothek als Unterverzeichnis hinzufügen:
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)In der Befehlszeile entspricht dies -std=c++20 (clang/gcc) oder /std:c++20 (MSVC).
CMake-Konfiguration schlägt fehl — Version zu alt
Das Projekt erfordert CMake 3.22 oder höher. Das Ausführen einer älteren CMake-Version erzeugt einen ähnlichen Fehler wie:
CMake Error at CMakeLists.txt:1 (cmake_minimum_required):
CMake 3.22 or higher is required. You are running version 3.16.3Prüfen Sie Ihre installierte Version und aktualisieren Sie sie, anstatt das mitgelieferte CMakeLists.txt zu bearbeiten:
cmake --versionInstallieren Sie eine aktuelle Version von cmake.org oder Ihrem Paketmanager — die Mindestversion spiegelt die Generator- und Sprachfeatures wider, die der Build tatsächlich verwendet, und nicht irgendeine willkürliche Untergrenze.
FetchContent schlägt beim Herunterladen des Repositorys fehl.
Wenn Sie die Bibliothek mit FetchContent statt eines manuellen add_subdirectory einbinden, sind Fehler zur Konfigurationszeit meist ein Netzwerkproblem und nicht ein CMake-Problem:
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 führt git clone während der CMake-Konfiguration aus. Hinter einem Unternehmens-Proxy oder einer Firewall oder auf einem luftisolierten CI-Runner schlägt dies mit Failed to clone repository fehl. So beheben Sie das:
- Setzen Sie
HTTPS_PROXY/HTTP_PROXYfür den CMake-Konfigurationsschritt, oder - Klone das Repository einmal im Voraus und verweise
FETCHCONTENT_SOURCE_DIR_ASPOSE_PDF_FOSSauf das lokale Checkout, sodassFetchContentes wiederverwendet, anstatt es über das Netzwerk zu holen, oder - Binden Sie die Quelle direkt ein und verwenden Sie
add_subdirectory(), das zur Konfigurationszeit keine Netzwerkabhängigkeit hat.
Undefinierte Referenz / Nicht aufgelöstes externes Symbol zur Linkzeit.
Die Kompilierung ist erfolgreich, aber das Linken schlägt mit undefined reference to Aspose::Pdf::Document::... (gcc/clang) oder einem unresolved external symbol-Fehler (MSVC) fehl. Das liegt fast immer an einer von zwei Ursachen:
- Fehlender Link-Schritt —
target_link_libraries(your_app PRIVATE aspose_pdf_foss)fehlt oder ist falsch geschrieben.add_subdirectory()allein macht nur die Header sichtbar; es verlinkt die statische Bibliothek nicht. - Laufzeitbibliothek / Build-Typ-Mismatch bei MSVC — Verlinken einer
Release-gebautaspose_pdf_foss.libin einDebugausführbare Datei (oder umgekehrt) mischt inkompatible C-Laufzeitbibliotheken und schlägt fehl mitLNK2038Inkonsistenzen. Bauen Sie die Bibliothek und Ihre Anwendung mit dem gleichenCMAKE_BUILD_TYPE(oder dem gleichen/MD//MDdRuntime-Bibliothekseinstellung).
XMP-Metadaten-Typprüfungen geben immer False zurück
XmpValue — der von Document.Metadata()-Einträgen zurückgegebene Wertetyp — stellt Typprüfungs-Hilfsfunktionen IsDateTime(), IsField(), IsNamedValue(), IsRaw(), IsNamedValues() und IsStructure() bereit. In der aktuellen Version sind diese sechs Methoden Stubs, die bedingungslos false zurückgeben, sodass Code, der je nach ihnen zwischen XMP-Wertarten unterscheidet, immer den “false”-Pfad wählt.
Verwenden Sie stattdessen die implementierten Prüfungen — IsString(), IsInteger(), IsDouble(), IsArray() — oder rufen Sie den passenden Accessor (ToStringValue(), ToInteger(), ToDouble(), ToArray()) direkt auf, wenn die Art des Wertes bereits aus dem Kontext bekannt ist. Eine kleine Anzahl von Low-Level-Internetypen (BitmapInfos Standardkonstruktor sowie die internen Typen Encoding und Value, die vom PDF-Objektmodell verwendet werden) enthält ebenfalls Stub-Implementierungen, die im üblichen Dokumentenverarbeitungs-Code nicht ausgeführt werden.