0
0

Rustのビルドでいろいろエラーが出る場合

Last updated at Posted at 2024-07-17

Rustの、Tcl/Tkラッパーである「tcl」と「tk」クレートをWindowsでビルドしようとしたら、libclangが見つからないなど、いろいろなエラーが出て、解決が難しかったので、ここにメモしておきます。

再現するかのテスト

まず、WindowsのRustで、ActiveTclをインストールした後で、ターミナルから、Tcl/Tkのラッパーをインストールして、ビルドするだけでlibclangが見つからないというエラーが出ます。

# Tcl/Tkをラップするクレートのインストール
cargo add tcl tk
# ビルドを実行
rust build

次のようなエラーです。

thread 'main' panicked at 'Unable to find libclang: "couldn't find any valid shared libraries matching: ['clang.dll', 'libclang.dll'] …

前提条件ですが...

  • Windows版のRust(ネイティブコンパイラ)を使用している
  • rustup -vで見ると、1.27.1 であるが、もっと低いバージョンでも同じエラーが出ている
    • rustup 1.27.1 (54dd3d00f 2024-04-24)
  • rustup showで見ると、stable-x86_64-pc-windows-msvc (default)が選択されている

エラーの原因は?

そして、エラーメッセージからいろいろ調べてみると、最新版のRustのLLVMのバージョンがうまくマッチしていないのが原因?のようです。

ChocolateyでLLVMの最新版をインストールすると解決するというヒントを見つけました。

直接的な解決策

Chocolatey (https://chocolatey.org/) をインストールして、管理者権限でPowerShellを起動して以下のコマンドを実行します。

choco install llvm

その後、cargo runを実行すると、正しくビルドが行われました。

「stdio.hがない」とエラーが出る場合

以下のようにstdio.h がないというエラーが出る場合があります。

thread 'main' panicked at 'bindgen builder constructed.: ClangDiagnostic(
… fatal error: 'stdio.h' file not found\n")

この場合、Visual Studioをインストールして、「C++によるデスクトップ開発」にチェックを付けてインストールする必要があります。

スクリーンショット 2024-07-18 8.53.45.png

その他 Tcl/Tkのパスの問題

また、本家Rustのtkクレートの情報によると、ActiveTclのインストール先をデフォルトでインストールする必要があるようです。

  1. インストール先を以下にしなくてはならない
    実行ファイルが、以下のパスにあること
    C:\ActiveTcl\bin\wish.exe

  2. 上記を実行して、バージョンが表示されること
    % info patchlevel

表示された!

問題なくTcl/Tkのビルドがうまくいって、適当なサンプルをビルド売ると、下記のように表示されます。

スクリーンショット 2024-07-17 10.18.25.png

まとめ

Rustの中だけで全てが解決する場合は、ビルドにそれほど問題がないのですが、C++で作ったライブラリをリンクしようと思う場合には、環境の構築などのそれなりにノウハウが必要となるようです。

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