Troubleshooting

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

Verifique su versión instalada y actualice en lugar de editar el CMakeLists.txt incluido:

cmake --version

Instale 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_PROXY para el paso de configuración de CMake, o
  • Clona el repositorio una vez y apunta FETCHCONTENT_SOURCE_DIR_ASPOSE_PDF_FOSS al checkout local para que FetchContent lo 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:

  1. 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.
  2. Desajuste de biblioteca de tiempo de ejecución / tipo de compilación en MSVC — enlazando un Release-construido aspose_pdf_foss.lib en un Debug ejecutable (o viceversa) combina bibliotecas de tiempo de ejecución de C incompatibles y falla con LNK2038 incompatibilidades. Compila la biblioteca y tu aplicación con el mismo CMAKE_BUILD_TYPE (o el mismo /MD//MDd ajuste 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.

Ver también

 Español