Troubleshooting

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

Prüfen Sie Ihre installierte Version und aktualisieren Sie sie, anstatt das mitgelieferte CMakeLists.txt zu bearbeiten:

cmake --version

Installieren 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_PROXY für den CMake-Konfigurationsschritt, oder
  • Klone das Repository einmal im Voraus und verweise FETCHCONTENT_SOURCE_DIR_ASPOSE_PDF_FOSS auf das lokale Checkout, sodass FetchContent es 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:

  1. 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.
  2. Laufzeitbibliothek / Build-Typ-Mismatch bei MSVC — Verlinken einer Release-gebaut aspose_pdf_foss.lib in ein Debug ausführbare Datei (oder umgekehrt) mischt inkompatible C-Laufzeitbibliotheken und schlägt fehl mit LNK2038 Inkonsistenzen. Bauen Sie die Bibliothek und Ihre Anwendung mit dem gleichen CMAKE_BUILD_TYPE (oder dem gleichen /MD//MDd Runtime-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.

Siehe auch

 Deutsch