Troubleshooting

Troubleshooting

Falha na Compilação com Erros C++20

Aspose.PDF FOSS para C++ requer um compilador C++20 — clang 16+, gcc 13+, ou MSVC 2022 17.5+. Se sua compilação falhar com erros como “designated initializers only allowed in C++20” ou “concepts require ‘-std=c++20’”, o projeto consumidor não está compilando com o padrão C++20 habilitado.

Defina o padrão explicitamente antes de adicionar a biblioteca como um subdiretório:

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)

Na linha de comando isso corresponde a -std=c++20 (clang/gcc) ou /std:c++20 (MSVC).

Falha na Configuração do CMake — Versão Muito Antiga

O projeto requer CMake 3.22 ou superior. Executar um CMake mais antigo produz um erro semelhante 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 a versão instalada e atualize em vez de editar o CMakeLists.txt fornecido:

cmake --version

Instale uma versão atual de cmake.org ou seu gerenciador de pacotes — a versão mínima reflete o gerador e os recursos de linguagem que a compilação realmente usa, não um limite arbitrário.

FetchContent Falha ao Baixar o Repositório

Se você incluir a biblioteca com FetchContent em vez de um add_subdirectory manual, falhas no tempo de configuração geralmente são um problema de rede, não um problema do 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 executa git clone durante a configuração do CMake. Por trás de um proxy corporativo ou firewall, ou em um executor de CI isolado, isso falha com Failed to clone repository. Para corrigir:

  • Defina HTTPS_PROXY/HTTP_PROXY para a etapa de configuração do CMake, ou
  • Pré-clone o repositório uma vez e aponte FETCHCONTENT_SOURCE_DIR_ASPOSE_PDF_FOSS para o checkout local, para que FetchContent o reutilize em vez de buscar pela rede, ou
  • Inclua a fonte diretamente e use add_subdirectory(), que não tem dependência de rede no momento da configuração.

Referência Indefinida / Símbolo Externo Não Resolvido no Momento da Ligação

A compilação tem sucesso, mas a vinculação falha com undefined reference to Aspose::Pdf::Document::... (gcc/clang) ou um erro unresolved external symbol (MSVC). Isso quase sempre é causado por uma das duas razões:

  1. Etapa de link ausente — target_link_libraries(your_app PRIVATE aspose_pdf_foss) está ausente ou escrito incorretamente. add_subdirectory() sozinho apenas torna os cabeçalhos visíveis; não vincula a biblioteca estática.
  2. Incompatibilidade entre biblioteca em tempo de execução / tipo de compilação no MSVC — vinculando um Release-construído aspose_pdf_foss.lib em um Debug executável (ou vice-versa) mistura bibliotecas de tempo de execução C incompatíveis e falha com LNK2038 incompatibilidades. Compile a biblioteca e sua aplicação com o mesmo CMAKE_BUILD_TYPE (ou o mesmo /MD//MDd configuração da biblioteca de tempo de execução).

Verificações de Tipo de Metadados XMP Sempre Retornam Falso

XmpValue — o tipo de valor retornado das entradas Document.Metadata() — expõe auxiliares de verificação de tipo IsDateTime(), IsField(), IsNamedValue(), IsRaw(), IsNamedValues() e IsStructure(). Na versão atual esses seis métodos são stubs que retornam incondicionalmente false, de modo que o código que ramifica neles para distinguir os tipos de valor XMP sempre segue o caminho “false”.

Use as verificações implementadas em vez disso — IsString(), IsInteger(), IsDouble(), IsArray() — ou chame o acessor correspondente (ToStringValue(), ToInteger(), ToDouble(), ToArray()) diretamente quando o tipo do valor já for conhecido a partir do contexto. Um pequeno número de tipos internos de baixo nível (BitmapInfo’s construtor padrão, e os tipos internos Encoding e Value usados pelo modelo de objeto PDF) também contêm corpos stub que não são exercitados pelo código típico de processamento de documentos.

Ver também

 Português