Troubleshooting
Budowanie nie powiodło się z błędami C++20
Aspose.PDF FOSS dla C++ wymaga kompilatora C++20 — clang 16+, gcc 13+ lub MSVC 2022 17.5+. Jeśli Twoja kompilacja nie powodzi się z błędami takimi jak “designated initializers only allowed in C++20” lub “concepts require ‘-std=c++20’”, projekt korzystający nie kompiluje z włączonym standardem C++20.
Ustaw standard jawnie przed dodaniem biblioteki jako podkatalogu:
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)W wierszu poleceń odpowiada to -std=c++20 (clang/gcc) lub /std:c++20 (MSVC).
Błąd konfiguracji CMake — wersja jest za stara
Projekt wymaga CMake 3.22 lub nowszego. Uruchomienie starszej wersji CMake generuje błąd podobny do:
CMake Error at CMakeLists.txt:1 (cmake_minimum_required):
CMake 3.22 or higher is required. You are running version 3.16.3Sprawdź zainstalowaną wersję i zaktualizuj ją zamiast edytować dostarczony CMakeLists.txt:
cmake --versionZainstaluj aktualne wydanie z cmake.org lub menedżerem pakietów — minimalna wersja odzwierciedla generator i funkcje językowe, których kompilacja faktycznie używa, a nie arbitralny próg.
FetchContent nie może pobrać repozytorium
Jeśli dostarczasz bibliotekę za pomocą FetchContent zamiast ręcznego add_subdirectory, błędy w czasie konfiguracji zazwyczaj wynikają z problemu sieciowego, a nie z problemu 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 uruchamia git clone podczas konfiguracji CMake. Za korporacyjnym proxy lub zaporą, lub na odizolowanym runnerze CI, to kończy się niepowodzeniem z Failed to clone repository. Aby to naprawić:
- Ustaw
HTTPS_PROXY/HTTP_PROXYdla kroku konfiguracji CMake, lub - Wstępnie sklonuj repozytorium raz i skieruj
FETCHCONTENT_SOURCE_DIR_ASPOSE_PDF_FOSSna lokalne pobranie, abyFetchContentponownie go używało zamiast pobierać przez sieć, lub - Dostarcz źródło bezpośrednio i użyj
add_subdirectory(), który nie ma zależności sieciowych w czasie konfiguracji.
Nieokreślone odwołanie / Nierozwiązany zewnętrzny symbol w czasie linkowania
Kompilacja kończy się sukcesem, ale łączenie nie powodzi się z undefined reference to Aspose::Pdf::Document::... (gcc/clang) lub błędem unresolved external symbol (MSVC). To prawie zawsze wynika z jednej z dwóch przyczyn:
- Brakujący krok linkowania —
target_link_libraries(your_app PRIVATE aspose_pdf_foss)brakuje lub jest błędnie napisany.add_subdirectory()samodzielnie udostępnia tylko nagłówki; nie linkuje biblioteki statycznej. - Niezgodność biblioteki uruchomieniowej / typu kompilacji w MSVC — linkowanie a
Release-zbudowanyaspose_pdf_foss.libdoDebugplik wykonywalny (lub odwrotnie) miesza niekompatybilne biblioteki czasu wykonywania C i kończy się niepowodzeniem przyLNK2038niezgodnościach. Zbuduj bibliotekę i swoją aplikację przy użyciu tego samegoCMAKE_BUILD_TYPE(lub tego samego/MD//MDdustawienia biblioteki czasu wykonywania).
Sprawdzanie typów metadanych XMP zawsze zwraca false
XmpValue — typ wartości zwracany z wpisów Document.Metadata() — udostępnia pomocniki sprawdzania typów IsDateTime(), IsField(), IsNamedValue(), IsRaw(), IsNamedValues() i IsStructure(). W bieżącym wydaniu te sześć metod to szkielety, które bezwarunkowo zwracają false, więc kod, który rozgałęzia się na ich podstawie, aby odróżnić rodzaje wartości XMP, zawsze wybiera ścieżkę “false”.
Użyj zamiast tego zaimplementowanych sprawdzeń — IsString(), IsInteger(), IsDouble(), IsArray() — lub wywołaj odpowiadający akcesor (ToStringValue(), ToInteger(), ToDouble(), ToArray()) bezpośrednio, gdy rodzaj wartości jest już znany z kontekstu. Niektóre niskopoziomowe typy wewnętrzne (BitmapInfo konstruktor domyślny oraz wewnętrzne typy Encoding i Value używane przez model obiektowy PDF) również zawierają szkielety ciał, które nie są wykorzystywane w typowym kodzie przetwarzania dokumentów.