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でビルドしてください。
