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.3Verifique a versão instalada e atualize em vez de editar o CMakeLists.txt fornecido:
cmake --versionInstale 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_PROXYpara a etapa de configuração do CMake, ou - Pré-clone o repositório uma vez e aponte
FETCHCONTENT_SOURCE_DIR_ASPOSE_PDF_FOSSpara o checkout local, para queFetchContento 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:
- 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. - Incompatibilidade entre biblioteca em tempo de execução / tipo de compilação no MSVC — vinculando um
Release-construídoaspose_pdf_foss.libem umDebugexecutável (ou vice-versa) mistura bibliotecas de tempo de execução C incompatíveis e falha comLNK2038incompatibilidades. Compile a biblioteca e sua aplicação com o mesmoCMAKE_BUILD_TYPE(ou o mesmo/MD//MDdconfiguraçã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.