Troubleshooting

Troubleshooting

ビルドが C++20 エラーで失敗する

Aspose.PDF の C++ 用 FOSS は C++20 コンパイラが必要です — clang 16 以上、gcc 13 以上、または MSVC 2022 17.5 以上。ビルドが「designated initializers only allowed in C++20」や「concepts require ‘-std=c++20’」といったエラーで失敗する場合、利用側プロジェクトが C++20 標準を有効にしてコンパイルしていません。

ライブラリをサブディレクトリとして追加する前に、標準を明示的に設定してください:

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)

コマンドラインでは、これは -std=c++20 (clang/gcc) または /std:c++20 (MSVC) に相当します。

CMake 設定が失敗 — バージョンが古すぎる

このプロジェクトは CMake 3.22 以上が必要です。古い CMake を実行すると、以下のようなエラーが出ます:

CMake Error at CMakeLists.txt:1 (cmake_minimum_required):
  CMake 3.22 or higher is required.  You are running version 3.16.3

ベンダー提供の CMakeLists.txt を編集するのではなく、インストール済みのバージョンを確認してアップグレードしてください:

cmake --version

現在のリリースを以下からインストールしてください cmake.org またはご使用のパッケージマネージャーから — 最低バージョンは、ビルドが実際に使用するジェネレータや言語機能を反映しており、任意の下限ではありません。

FetchContent がリポジトリのダウンロードに失敗しました

手動の add_subdirectory の代わりに FetchContent でライブラリをベンダー化する場合、設定時の失敗は通常、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 は CMake 設定中に git clone を実行します。企業プロキシやファイアウォールの背後、またはネットワークから遮断された CI ランナー上では、これが Failed to clone repository により失敗します。対処方法は次のとおりです:

  • CMake 設定ステップで HTTPS_PROXY/HTTP_PROXY を設定するか、
  • リポジトリを一度事前にクローンし、FETCHCONTENT_SOURCE_DIR_ASPOSE_PDF_FOSS をローカルのチェックアウトに指すようにして、FetchContent がネットワーク経由で取得する代わりに再利用するか、
  • ソースを直接ベンダー化し、設定時にネットワーク依存しない add_subdirectory() を使用してください。

リンク時の未定義参照 / 解決できない外部シンボル

コンパイルは成功しますが、リンク時に undefined reference to Aspose::Pdf::Document::...(gcc/clang)または unresolved external symbol エラー(MSVC)が発生します。これはほぼ常に次の二つの原因のいずれかです:

  1. リンクステップがありません — target_link_libraries(your_app PRIVATE aspose_pdf_foss) が欠落しているか、綴りが間違っています。 add_subdirectory() 単独で使用するとヘッダーが見えるだけで、静的ライブラリはリンクされません。
  2. MSVC におけるランタイムライブラリ / ビルドタイプの不一致 — リンクする a Release-ビルド aspose_pdf_foss.lib へ Debug 実行可能ファイル(またはその逆)は互換性のない C ランタイム ライブラリを混在させ、次のエラーで失敗します LNK2038 不一致が発生します。同じ CMAKE_BUILD_TYPE (または同じ /MD//MDd ランタイム ライブラリ設定)。

XMP メタデータ型チェックは常に false を返す

XmpValue — Document.Metadata() エントリから返される値の型 — は型チェックヘルパー IsDateTime()、IsField()、IsNamedValue()、IsRaw()、IsNamedValues()、および IsStructure() を公開します。現在のリリースでは、これら六つのメソッドはスタブであり、無条件に false を返すため、XMP の値種別を区別するためにそれらに分岐するコードは常に「false」パスを取ります。

代わりに実装済みのチェック — IsString()、IsInteger()、IsDouble()、IsArray() — を使用するか、コンテキストから値の種別が既に分かっている場合は対応するアクセサ(ToStringValue()、ToInteger()、ToDouble()、ToArray())を直接呼び出してください。ごく少数の低レベル内部型(BitmapInfo のデフォルトコンストラクタ、および PDF オブジェクトモデルで使用される内部 Encoding と Value 型)もスタブ本体を持っており、通常の文書処理コードでは呼び出されません。

参照

 日本語