Troubleshooting

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

Sprawdź zainstalowaną wersję i zaktualizuj ją zamiast edytować dostarczony CMakeLists.txt:

cmake --version

Zainstaluj 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_PROXY dla kroku konfiguracji CMake, lub
  • Wstępnie sklonuj repozytorium raz i skieruj FETCHCONTENT_SOURCE_DIR_ASPOSE_PDF_FOSS na lokalne pobranie, aby FetchContent ponownie 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:

  1. 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.
  2. Niezgodność biblioteki uruchomieniowej / typu kompilacji w MSVC — linkowanie a Release-zbudowany aspose_pdf_foss.lib do Debug plik wykonywalny (lub odwrotnie) miesza niekompatybilne biblioteki czasu wykonywania C i kończy się niepowodzeniem przy LNK2038 niezgodnościach. Zbuduj bibliotekę i swoją aplikację przy użyciu tego samego CMAKE_BUILD_TYPE (lub tego samego /MD//MDd ustawienia 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.

Zobacz także

 Polski