Troubleshooting
Construirea eșuează cu erori C++20
Aspose.PDF FOSS pentru C++ necesită un compilator C++20 — clang 16+, gcc 13+, sau MSVC 2022 17.5+. Dacă construcția dumneavoastră eșuează cu erori precum “designated initializers only allowed in C++20” sau “concepts require ‘-std=c++20’”, proiectul consumator nu compilează cu standardul C++20 activat.
Setați standardul explicit înainte de a adăuga biblioteca ca subdirector:
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)În linia de comandă, aceasta corespunde cu -std=c++20 (clang/gcc) sau /std:c++20 (MSVC).
Configurarea CMake eșuează — Versiune prea veche
Proiectul necesită CMake 3.22 sau o versiune ulterioară. Rularea unei versiuni mai vechi de CMake produce o eroare similară cu:
CMake Error at CMakeLists.txt:1 (cmake_minimum_required):
CMake 3.22 or higher is required. You are running version 3.16.3Verificați versiunea instalată și actualizați în loc să editați CMakeLists.txt furnizat:
cmake --versionInstalați o versiune curentă de la cmake.org sau managerul dumneavoastră de pachete — versiunea minimă reflectă generatorul și caracteristicile limbajului pe care le folosește efectiv construcția, nu un prag arbitrar.
FetchContent Nu reușește să descarce depozitul
Dacă furnizați biblioteca cu FetchContent în loc de un add_subdirectory manual, erorile în timpul configurării sunt de obicei o problemă de rețea mai degrabă decât o problemă 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 rulează git clone în timpul configurării CMake. Din spatele unui proxy corporativ sau firewall, sau pe un executor CI izolat, acest lucru eșuează cu Failed to clone repository. Pentru a rezolva:
- Setați
HTTPS_PROXY/HTTP_PROXYpentru pasul de configurare CMake, sau - Pre-clonați depozitul o singură dată și indicați
FETCHCONTENT_SOURCE_DIR_ASPOSE_PDF_FOSSspre copia locală astfel încâtFetchContentsă o reutilizeze în loc să o descarce prin rețea, sau - Furnizați sursa direct și utilizați
add_subdirectory(), care nu are nicio dependență de rețea în timpul configurării.
Referință nedefinită / Simbol extern nerezolvat în timpul legării
Compilarea reușește, dar legarea eșuează cu undefined reference to Aspose::Pdf::Document::... (gcc/clang) sau cu o eroare unresolved external symbol (MSVC). Acest lucru este aproape întotdeauna cauzat de una dintre cele două situații:
- Pas de legare lipsă —
target_link_libraries(your_app PRIVATE aspose_pdf_foss)lipsește sau este scris greșit.add_subdirectory()singur face doar antetele vizibile; nu leagă biblioteca statică. - Neconcordanță între biblioteca de rulare / tipul de construcție pe MSVC — legarea unui
Release-construitaspose_pdf_foss.libîntr-unDebugexecutabil (sau invers) amestecă biblioteci C runtime incompatibile și eșuează cuLNK2038neconcordanțe. Construiți biblioteca și aplicația dvs. cu acelașiCMAKE_BUILD_TYPE(sau același/MD//MDdsetare a bibliotecii runtime).
Verificările tipului de metadate XMP returnează întotdeauna fals
XmpValue — tipul de valoare returnat din intrările Document.Metadata() — expune ajutoare de verificare a tipului IsDateTime(), IsField(), IsNamedValue(), IsRaw(), IsNamedValues() și IsStructure(). În versiunea curentă aceste șase metode sunt stub-uri care returnează necondiționat false, astfel că codul care le ramifică pentru a distinge tipurile de valori XMP ia întotdeauna calea „false”.
Folosiți în schimb verificările implementate — IsString(), IsInteger(), IsDouble(), IsArray() — sau apelați direct accesatorul corespunzător (ToStringValue(), ToInteger(), ToDouble(), ToArray()) când tipul valorii este deja cunoscut din context. Un număr mic de tipuri interne de nivel scăzut (BitmapInfo constructorul său implicit și tipurile interne Encoding și Value utilizate de modelul de obiect PDF) conțin, de asemenea, corpuri de tip stub care nu sunt utilizate de codul tipic de procesare a documentelor.