Troubleshooting
Derleme, C++20 Hatalarıyla Başarısız Oluyor
Aspose.PDF FOSS for C++ bir C++20 derleyicisi gerektirir — clang 16+, gcc 13+ veya MSVC 2022 17.5+. Derlemeniz “designated initializers only allowed in C++20” veya “concepts require ‘-std=c++20’” gibi hatalarla başarısız oluyorsa, tüketen proje C++20 standardını etkinleştirmeden derleniyor demektir.
Kütüphaneyi bir alt dizin olarak eklemeden önce standardı açıkça ayarlayın:
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)Komut satırında bu, -std=c++20 (clang/gcc) veya /std:c++20 (MSVC) anlamına gelir.
CMake Yapılandırması Başarısız — Sürüm Çok Eski
Proje CMake 3.22 veya daha yenisini gerektirir. Daha eski bir CMake çalıştırdığınızda aşağıdaki gibi bir hata ortaya çıkar:
CMake Error at CMakeLists.txt:1 (cmake_minimum_required):
CMake 3.22 or higher is required. You are running version 3.16.3Yüklü sürümünüzü kontrol edin ve satıcıdan gelen CMakeLists.txt‘ı düzenlemek yerine yükseltin:
cmake --versionMevcut bir sürümü şuradan kurun cmake.org veya paket yöneticiniz — minimum sürüm, derlemenin gerçekte kullandığı jeneratör ve dil özelliklerini yansıtır, rastgele bir alt sınır değildir.
FetchContent Depoyu İndiremiyor
Kütüphaneyi FetchContent ile, manuel bir add_subdirectory yerine vendor ederseniz, yapılandırma zamanındaki hatalar genellikle bir CMake sorunu yerine ağ problemi olur:
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, CMake yapılandırması sırasında git clone çalıştırır. Kurumsal bir proxy ya da güvenlik duvarının arkasında, ya da ağ bağlantısı olmayan bir CI çalıştırıcısında, bu Failed to clone repository hatasıyla başarısız olur. Düzeltmek için:
- CMake yapılandırma adımı için
HTTPS_PROXY/HTTP_PROXYayarlayın, ya da - Depoyu bir kez önceden klonlayın ve
FETCHCONTENT_SOURCE_DIR_ASPOSE_PDF_FOSS‘ı yerel çekime yönlendirin, böyleceFetchContentağ üzerinden indirmek yerine onu yeniden kullanır, ya da - Kaynağı doğrudan vendor edin ve
add_subdirectory()‘ı kullanın; bu, yapılandırma zamanında ağ bağımlılığı içermez.
Bağlantı Zamanında Tanımsız Referans / Çözülmemiş Dış Sembol
Derleme başarılı olur ancak bağlama undefined reference to Aspose::Pdf::Document::... (gcc/clang) veya bir unresolved external symbol hatası (MSVC) ile başarısız olur. Bu neredeyse her zaman iki nedenden biridir:
- Eksik bağlama adımı —
target_link_libraries(your_app PRIVATE aspose_pdf_foss)eksik ya da hatalı yazılmış.add_subdirectory()tek başına yalnızca başlık dosyalarını görünür kılar; statik kütüphaneyi bağlamaz. - MSVC’de çalışma zamanı kitaplığı / derleme türü uyuşmazlığı — bağlarken bir
Release-derlenmişaspose_pdf_foss.libbirDebugçalıştırılabilir (veya tersine) uyumsuz C çalışma zamanı kitaplıklarını karıştırır ve şu hatayla başarısız olurLNK2038eşleşmemeler. Kütüphaneyi ve uygulamanızı aynıCMAKE_BUILD_TYPE(ya da aynı/MD//MDdçalışma zamanı kitaplığı ayarı).
XMP Metadata Tür Kontrolleri Her Zaman False Döner
XmpValue — Document.Metadata() girişlerinden dönen değer türü — IsDateTime(), IsField(), IsNamedValue(), IsRaw(), IsNamedValues() ve IsStructure() tip-kontrol yardımcılarını ortaya çıkarır. Mevcut sürümde bu altı yöntem, koşulsuz olarak false dönen stub’lardır, bu nedenle XMP değer türlerini ayırt etmek için bunlara göre dallanan kod her zaman “false” yolunu izler.
Bunun yerine uygulanmış kontrolleri kullanın — IsString(), IsInteger(), IsDouble(), IsArray() — veya değerin türü bağlamdan zaten biliniyorsa eşleşen erişiciyi (ToStringValue(), ToInteger(), ToDouble(), ToArray()) doğrudan çağırın. Az sayıda düşük seviyeli iç tip (BitmapInfo‘ın varsayılan yapıcı fonksiyonu ve PDF nesne modeli tarafından kullanılan iç Encoding ve Value tipleri) ayrıca tipik belge işleme kodu tarafından kullanılmayan stub gövdeler içerir.