Troubleshooting
Az építés C++20 hibákkal meghiúsul
Aspose.PDF FOSS for C++ egy C++20 fordítót igényel — clang 16+, gcc 13+, vagy MSVC 2022 17.5+. Ha az építésed olyan hibákkal meghiúsul, mint a “designated initializers only allowed in C++20” vagy a “concepts require ‘-std=c++20’”, akkor a felhasználó projektje nem a C++20 szabványt használja.
Állítsd be a szabványt explicit módon, mielőtt a könyvtárat alkönyvtárként hozzáadnád:
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)Parancssorban ez a -std=c++20 (clang/gcc) vagy a /std:c++20 (MSVC) megfelelője.
A CMake konfiguráció meghiúsul — a verzió túl régi
A projekt CMake 3.22 vagy újabb verziót igényel. Egy régebbi CMake futtatása hasonló hibát eredményez:
CMake Error at CMakeLists.txt:1 (cmake_minimum_required):
CMake 3.22 or higher is required. You are running version 3.16.3Ellenőrizd a telepített verziót, és frissítsd, ahelyett, hogy a vendorizált CMakeLists.txt fájlt szerkesztenéd:
cmake --versionTelepíts egy aktuális kiadást a cmake.org vagy a csomagkezelőddel — a minimális verzió a generátor és a nyelvi funkciók tényleges használatát tükrözi, nem egy tetszőleges alsó határt.
FetchContent Nem tudja letölteni a tárolót
Ha a könyvtárat a FetchContent használatával vendorálod a manuális add_subdirectory helyett, a konfigurációs idő alatti hibák általában hálózati problémák, nem CMake problémák:
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)A FetchContent_MakeAvailable a git clone parancsot futtatja a CMake konfiguráció során. Vállalati proxy vagy tűzfal mögött, vagy egy levegőn levágott CI futtatón ez Failed to clone repository hibával bukik. A javításhoz:
- Állítsd be a
HTTPS_PROXY/HTTP_PROXYértéket a CMake konfigurációs lépéshez, vagy - Előre klónozd a tárolót egyszer, és irányítsd a
FETCHCONTENT_SOURCE_DIR_ASPOSE_PDF_FOSS-t a helyi checkout-ra, hogy aFetchContentújra felhasználja azt a hálózaton keresztüli letöltés helyett, vagy - Vendoráld közvetlenül a forrást, és használd a
add_subdirectory()-t, amelynek nincs hálózati függősége a konfigurációs időben.
Nem definiált hivatkozás / Feloldatlan külső szimbólum a linkeléskor
A fordítás sikeres, de a linkelés undefined reference to Aspose::Pdf::Document::... (gcc/clang) vagy unresolved external symbol hiba (MSVC) miatt meghiúsul. Ez szinte mindig az alábbi két ok egyike:
- Hiányzó linklépés —
target_link_libraries(your_app PRIVATE aspose_pdf_foss)hiányzik vagy el van gépelve.add_subdirectory()magában csak a fejléceket teszi láthatóvá; nem linkeli a statikus könyvtárat. - Futtatókörnyezet könyvtár / build-típus eltérés MSVC-n — linkelve egy
Release-építettaspose_pdf_foss.libegyDebugvégrehajtható (vagy fordítva) keveri az inkompatibilis C futtatókörnyezet könyvtárakat és hibát okozLNK2038eltérésekkel. Építsd a könyvtárat és az alkalmazásodat ugyanazzalCMAKE_BUILD_TYPE(vagy ugyanazzal/MD//MDdfuttatókörnyezet könyvtár beállítás).
Az XMP metaadat típusellenőrzések mindig hamisat adnak vissza
XmpValue — a Document.Metadata() bejegyzésekből visszakapott értéktípus — olyan típusellenőrző segédfüggvényeket tesz elérhetővé, mint IsDateTime(), IsField(), IsNamedValue(), IsRaw(), IsNamedValues() és IsStructure(). A jelenlegi kiadásban ez a hat függvény csak helykitöltő, és feltétlenül false értéket ad vissza, így a kód, amely ezek alapján különbözteti meg az XMP értéktípusokat, mindig a “false” ágat választja.
Használd inkább a megvalósított ellenőrzéseket — IsString(), IsInteger(), IsDouble(), IsArray() — vagy hívd meg közvetlenül a megfelelő accessor-t (ToStringValue(), ToInteger(), ToDouble(), ToArray()), ha az érték típusa már a kontextusból ismert. Egy kisebb számú alacsony szintű belső típus (BitmapInfo alapértelmezett konstruktorja, valamint a PDF objektummodell által használt belső Encoding és Value típusok) szintén tartalmaz helykitöltő testeket, amelyeket a tipikus dokumentumfeldolgozó kód nem hív meg.