Troubleshooting
Build Gagal dengan Kesalahan C++20
Aspose.PDF FOSS untuk C++ memerlukan kompiler C++20 — clang 16+, gcc 13+, atau MSVC 2022 17.5+. Jika build Anda gagal dengan kesalahan seperti “designated initializers only allowed in C++20” atau “concepts require ‘-std=c++20’”, proyek yang mengonsumsi tidak mengompilasi dengan standar C++20 yang diaktifkan.
Setel standar secara eksplisit sebelum menambahkan perpustakaan sebagai subdirektori:
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)Di baris perintah ini sesuai dengan -std=c++20 (clang/gcc) atau /std:c++20 (MSVC).
Konfigurasi CMake Gagal — Versi Terlalu Lama
Proyek ini memerlukan CMake 3.22 atau lebih baru. Menjalankan CMake yang lebih lama menghasilkan kesalahan serupa dengan:
CMake Error at CMakeLists.txt:1 (cmake_minimum_required):
CMake 3.22 or higher is required. You are running version 3.16.3Periksa versi yang terpasang dan tingkatkan alih-alih mengedit CMakeLists.txt yang disertakan:
cmake --versionPasang rilis terkini dari cmake.org atau manajer paket Anda — versi minimum mencerminkan generator dan fitur bahasa yang sebenarnya digunakan oleh proses build, bukan batas minimum sewenang-wenang.
FetchContent Gagal Mengunduh Repository
Jika Anda vendor perpustakaan dengan FetchContent alih-alih add_subdirectory manual, kegagalan pada waktu konfigurasi biasanya merupakan masalah jaringan bukan masalah 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 menjalankan git clone selama konfigurasi CMake. Di balik proxy atau firewall perusahaan, atau pada runner CI yang terisolasi, ini gagal dengan Failed to clone repository. Untuk memperbaikinya:
- Setel
HTTPS_PROXY/HTTP_PROXYuntuk langkah konfigurasi CMake, atau - Pra-kloning repositori sekali dan arahkan
FETCHCONTENT_SOURCE_DIR_ASPOSE_PDF_FOSSke checkout lokal sehinggaFetchContentmenggunakan kembali itu alih-alih mengambil lewat jaringan, atau - Vendor sumber secara langsung dan gunakan
add_subdirectory(), yang tidak memiliki ketergantungan jaringan pada waktu konfigurasi.
Referensi Tidak Didefinisikan / Simbol Eksternal Tidak Terpecahkan pada Waktu Linking
Kompilasi berhasil tetapi penautan gagal dengan undefined reference to Aspose::Pdf::Document::... (gcc/clang) atau kesalahan unresolved external symbol (MSVC). Ini hampir selalu disebabkan oleh salah satu dari dua hal berikut:
- Langkah tautan yang hilang —
target_link_libraries(your_app PRIVATE aspose_pdf_foss)tidak ada atau salah eja.add_subdirectory()sendirian hanya membuat header terlihat; tidak menautkan pustaka statis. - Ketidaksesuaian pustaka runtime / tipe build pada MSVC — menautkan sebuah
Release-dibangunaspose_pdf_foss.libmenjadiDebugeksekutabel (atau sebaliknya) mencampur perpustakaan runtime C yang tidak kompatibel dan gagal denganLNK2038ketidaksesuaian. Bangun perpustakaan dan aplikasi Anda dengan yang samaCMAKE_BUILD_TYPE(atau yang sama/MD//MDdpengaturan perpustakaan runtime).
Pengecekan Tipe Metadata XMP Selalu Mengembalikan False
XmpValue — tipe nilai yang dikembalikan dari entri Document.Metadata() — menyediakan pembantu pengecekan tipe IsDateTime(), IsField(), IsNamedValue(), IsRaw(), IsNamedValues(), dan IsStructure(). Pada rilis saat ini keenam metode ini adalah stub yang selalu mengembalikan false, sehingga kode yang bercabang berdasarkan mereka untuk membedakan jenis nilai XMP selalu mengambil jalur “false”.
Gunakan pengecekan yang diimplementasikan sebagai gantinya — IsString(), IsInteger(), IsDouble(), IsArray() — atau panggil accessor yang cocok (ToStringValue(), ToInteger(), ToDouble(), ToArray()) secara langsung ketika jenis nilai sudah diketahui dari konteks. Sebuah sejumlah kecil tipe internal tingkat rendah (BitmapInfo’s default constructor, dan tipe internal Encoding serta Value yang digunakan oleh model objek PDF) juga berisi badan stub yang tidak dieksekusi oleh kode pemrosesan dokumen tipikal.