0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Devbox + Go 1.25で遭遇したリンカーエラーの解決方法

Posted at

この投稿では、DevboxでGo 1.25を使用した際に発生したリンカーエラーと、その解決方法について解説します。macOS環境でGoプログラムをビルドしようとして、Undefined symbols for architecture arm64というエラーに遭遇した方の参考になれば幸いです。

この投稿で知れること

  • Devbox + Go 1.25で発生する具体的なエラー内容
  • Apple SDKパッケージを追加することでエラーを解決する方法
  • エラーの原因となっているシンボル不足の背景

発生したエラー

Go 1.25の環境でgo runを実行したところ、次のようなリンカーエラーが発生しました。

go run cmd/main.go
# command-line-arguments
/nix/store/.../link: running clang failed: exit status 1
Undefined symbols for architecture arm64:
  "_SecTrustCopyCertificateChain", referenced from:
      _crypto/x509/internal/macos.x509_SecTrustCopyCertificateChain_trampoline.abi0 in go.o
ld: symbol(s) not found for architecture arm64
clang: error: linker command failed with exit code 1 (use -v to see invocation)

エラーメッセージを見ると、_SecTrustCopyCertificateChainというシンボルが見つからないことが原因のようです。これは、macOSのSecurityフレームワークに関連する関数で、Go標準ライブラリのcrypto/x509パッケージが内部で使用しているものです。

解決方法

この問題は、Apple SDKパッケージをDevbox環境に追加することで解決できます。

手順1: 利用可能なApple SDKを検索する

まず、どのバージョンのApple SDKが利用可能かを確認します。

devbox search apple-sdk

検索結果には、複数のバージョンが表示されます。

Found 11+ results for "apple-sdk":
* apple-sdk  (14.4, 11.3, 10.12.2)
* apple-sdk_11  (11.3)
* apple-sdk_12  (12.3)
* apple-sdk_13  (13.3)
* apple-sdk_14  (14.4)
* apple-sdk_15  (15.5, 15.2, 15.0)
...

手順2: Apple SDKパッケージを追加する

検索結果から適切なバージョンを選んで追加します。今回はapple-sdk_15を追加しました。

devbox add apple-sdk_15

実行すると、次のような出力が表示されます。

Info: Adding package "apple-sdk_15@latest" to devbox.json
Info: Installing the following packages to the nix store: apple-sdk_15@latest
✓ Computed the Devbox environment.

手順3: ビルドを再実行する

Apple SDKを追加した後、再度go runを実行すると、今度は正常に動作します。

go run cmd/main.go
Hello world

エラーが解消され、プログラムが無事に実行できました。

なぜこの方法で解決するのか?

Go 1.25では、macOS環境でのビルド時に、より新しいmacOS APIへの依存が追加されたようです。_SecTrustCopyCertificateChainは、macOSのSecurityフレームワークに含まれる関数で、TLS証明書の検証などに使用されます。

Devboxは、Nixパッケージマネージャーを基盤としているため、必要なシステムライブラリやSDKを明示的にパッケージとして追加する必要があります。Apple SDKパッケージを追加することで、リンカーが必要なシンボルを見つけられるようになり、ビルドが成功するというわけです。

どのバージョンのApple SDKを選ぶべきか?

基本的には、使用しているmacOSのバージョンに合わせたSDKを選ぶのが無難です。今回はapple-sdk_15を選びましたが、環境によってはapple-sdk_14や他のバージョンでも動作する可能性があります。

もし特定のバージョンで問題が発生した場合は、別のバージョンを試してみるとよいでしょう。

参考情報

この問題の解決方法は、以下のGitHub issueのコメントを参考にしました。

同様の問題に遭遇している方も多いようなので、コミュニティの情報は貴重ですね。

おわりに

この投稿では、Devbox環境でGo 1.25を使用した際に発生したリンカーエラーと、Apple SDKパッケージを追加することでの解決方法を紹介しました。macOS環境でのGoビルドにおいて、システムフレームワークへの依存が原因でエラーが発生することがあるということを覚えておくと、今後のトラブルシューティングに役立つかもしれません。

最後までお読みくださりありがとうございました。Twitter では、Qiita に書かない技術ネタなどもツイートしているので、よかったらフォローしてもらえると嬉しいです:relieved:Twitter@suin

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?