PC パソコン

Xcode「library ‘d64’ not found」の原因と解決方法【Xcode 27】

Xcode 27へ更新した後、リンク工程でlibrary 'd64' not foundが発生する場合は、プロジェクトや生成ツールが古いリンカー選択オプション-ld64を渡している可能性があります。Xcode 27では旧ld64実装が削除され、Apple DTSはOTHER_LDFLAGSから-ld64を削除するよう案内しています。

代表的なエラーログ

ld: library 'd64' not found
clang: error: linker command failed with exit code 1 (use -v to see invocation)

Xcode 26ではビルドできていた同じプロジェクトが、Xcode 27で実機・Simulator向けにリンクすると失敗する形で現れます。

原因

OTHER_LDFLAGSに-ld64をそのまま指定すると、まずClangのコンパイラドライバがこの文字列を解釈します。Clangにとって-l名前はライブラリをリンクする指定なので、-ld64は「d64というライブラリを探す」という意味に解釈され、存在しないlibd64を検索してエラーになります。

さらに、-Xlinker -ld64のようにリンカーへ直接渡しても、Xcode 27のリンカーは-ld64をサポートしません。Appleの説明では、Xcode 15で導入された新実装ld_primeがXcode 27では常に使用され、旧ld64実装は削除されています。

発生条件・対象バージョン

  • Xcode 27でビルドしている
  • OTHER_LDFLAGS、.xcconfig、ビルドスクリプト、プロジェクト生成ツールのいずれかに-ld64が残っている
  • 古いリンカーへ切り替える目的で-ld_classicを設定している場合も、Xcode 27ではサポートされない

修正版について:これはXcode 27の不具合ではなく、旧リンカーの削除に伴う互換性変更です。将来の修正版を待つ問題ではなく、Xcode 27以降に合わせて古いフラグを削除する必要があります。

推奨する解決手順

1. Other Linker Flagsを確認する

Xcodeでターゲットを選び、Build Settingsを開いてOther Linker FlagsまたはOTHER_LDFLAGSを検索します。DebugとRelease、プロジェクト設定とターゲット設定の両方を確認してください。

2. -ld64を削除する

変更前:
OTHER_LDFLAGS = $(inherited) -ld64

変更後:
OTHER_LDFLAGS = $(inherited)

Apple DTSの推奨は、Xcode 27では-ld64を別の書式へ置き換えるのではなく、設定から削除することです。

3. -ld_classicも残っていないか確認する

Xcode 27のリリースノートでは、旧ld64リンカーと-ld_classicオプションの両方が削除されたと説明されています。次のような指定も削除します。

-ld_classic
-Wl,-ld_classic
-Xlinker -ld_classic

4. xcconfigと生成元を検索する

Build Settingsに直接表示されない場合は、プロジェクトルートで設定ファイルや生成スクリプトを検索します。

rg -n --hidden --glob '!DerivedData/**' -- '-ld64|-ld_classic' .

CocoaPods、独自スクリプト、ゲームエンジンなどがXcodeプロジェクトを生成している場合は、生成後の.pbxprojだけでなく生成元の設定を修正してください。

5. Clean Build Folder後に再ビルドする

Product > Clean Build Folderを実行し、再度ビルドします。リンクコマンドから-ld64が消えていることを確認してください。

確認方法

コマンドラインでは、実際に展開されたビルド設定を確認できます。

xcodebuild -project MyApp.xcodeproj \
  -scheme MyApp \
  -showBuildSettings | grep -E 'OTHER_LDFLAGS|OTHER_LDPLUSPLUSFLAGS'

出力に-ld64や-ld_classicがなく、ビルドログからlibrary 'd64' not foundが消えれば修正完了です。ArchiveやRelease構成だけにフラグが残ることもあるため、普段のDebugビルドだけでなくArchiveも確認してください。

代替策

  • 依存するビルドツールやゲームエンジンがフラグを自動追加する場合は、Xcode 27対応版へ更新する
  • すぐに生成設定を変更できない場合は、生成後にフラグを削除する処理を暫定的に追加する。ただし再生成のたびに必要になるため恒久策にはしない
  • 移行完了までXcode 26を一時的に使う。ただしXcode 27提出要件や新SDKへの対応を考えると、最終的にはフラグ削除が必要

注意点

  • libd64.aやlibd64.dylibを探して追加しないでください。本来リンクすべきライブラリが欠けているのではありません。
  • -Xlinker -ld64へ変更するだけでは解決しません。Xcode 27のリンカー自体が-ld64をサポートしないためです。
  • フラグを削除した後に別の未定義シンボルが出る場合は、旧リンカーで隠れていた互換性問題として個別に調査してください。
  • 複数ターゲット、テストターゲット、Pods、Swift Packageのバイナリターゲットごとに設定が残っていないか確認してください。

まとめ

Xcode 27のlibrary 'd64' not foundは、-ld64がコンパイラドライバに「d64というライブラリをリンクする指定」と解釈されることと、Xcode 27で旧ld64リンカーが削除されたことが原因です。OTHER_LDFLAGS、xcconfig、生成スクリプトから-ld64と-ld_classicを削除し、Xcode 27標準のld_primeでビルドしてください。

参照した公式情報