Troubleshooting
Compilación falla con errores de C++20
Aspose.PDF FOSS para C++ requiere un compilador C++20 — clang 16+, gcc 13+, o MSVC 2022 17.5+. Si su compilación falla con errores como “designated initializers only allowed in C++20” o “concepts require ‘-std=c++20’”, el proyecto que lo consume no está compilando con el estándar C++20 habilitado.
Establezca el estándar explícitamente antes de agregar la biblioteca como subdirectorio:
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)En la línea de comandos esto corresponde a -std=c++20 (clang/gcc) o /std:c++20 (MSVC).
La configuración de CMake falla — Versión demasiado antigua
El proyecto requiere CMake 3.22 o posterior. Ejecutar una versión más antigua de CMake produce un error similar a:
CMake Error at CMakeLists.txt:1 (cmake_minimum_required):
CMake 3.22 or higher is required. You are running version 3.16.3Verifique su versión instalada y actualice en lugar de editar el CMakeLists.txt incluido:
cmake --versionInstale una versión actual desde cmake.org o su gestor de paquetes — la versión mínima refleja el generador y las características del lenguaje que la compilación realmente utiliza, no un límite arbitrario.
FetchContent no puede descargar el repositorio
Si incluyes la biblioteca con FetchContent en lugar de un add_subdirectory manual, los fallos durante la configuración suelen ser un problema de red más que un problema de 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 ejecuta git clone durante la configuración de CMake. Detrás de un proxy corporativo o firewall, o en un runner de CI aislado, esto falla con Failed to clone repository. Para solucionarlo:
- Establece
HTTPS_PROXY/HTTP_PROXYpara el paso de configuración de CMake, o - Clona el repositorio una vez y apunta
FETCHCONTENT_SOURCE_DIR_ASPOSE_PDF_FOSSal checkout local para queFetchContentlo reutilice en lugar de descargarlo por la red, o - Incluye la fuente directamente y usa
add_subdirectory(), que no tiene dependencia de red en tiempo de configuración.
Referencia indefinida / Símbolo externo no resuelto en tiempo de enlace
La compilación tiene éxito pero el enlace falla con undefined reference to Aspose::Pdf::Document::... (gcc/clang) o un error unresolved external symbol (MSVC). Esto casi siempre se debe a una de dos causas:
- Paso de enlace faltante —
target_link_libraries(your_app PRIVATE aspose_pdf_foss)falta o está mal escrito.add_subdirectory()solo hace visibles los encabezados; no enlaza la biblioteca estática. - Desajuste de biblioteca de tiempo de ejecución / tipo de compilación en MSVC — enlazando un
Release-construidoaspose_pdf_foss.liben unDebugejecutable (o viceversa) combina bibliotecas de tiempo de ejecución de C incompatibles y falla conLNK2038incompatibilidades. Compila la biblioteca y tu aplicación con el mismoCMAKE_BUILD_TYPE(o el mismo/MD//MDdajuste de biblioteca de tiempo de ejecución).
Las comprobaciones de tipo de metadatos XMP siempre devuelven false
XmpValue — el tipo de valor devuelto por las entradas Document.Metadata() — expone ayudantes de verificación de tipos IsDateTime(), IsField(), IsNamedValue(), IsRaw(), IsNamedValues() y IsStructure(). En la versión actual estos seis métodos son stubs que devuelven incondicionalmente false, de modo que el código que ramifica sobre ellos para distinguir los tipos de valor XMP siempre toma la ruta “false”.
Utilice las comprobaciones implementadas en su lugar — IsString(), IsInteger(), IsDouble(), IsArray() — o llame directamente al accesor correspondiente (ToStringValue(), ToInteger(), ToDouble(), ToArray()) cuando el tipo del valor ya se conozca por el contexto. Un pequeño número de tipos internos de bajo nivel (BitmapInfo’s constructor por defecto, y los tipos internos Encoding y Value usados por el modelo de objetos PDF) también contienen cuerpos stub que no son ejercidos por el código típico de procesamiento de documentos.