Zenn
💻

Rustでnixクレートのptyを使おうとした時にコンパイルエラーになった

2025/04/06に公開

Rustのnixクレートのpty系の機能を使おうとしたらコンパイルエラーになったので、備忘録として残します
同時にforkでもおそらく似た理由でハマったので、ptyについて書いた後に書きます

1.Rustのnixクレートのptyを使おうとしたらコンパイルエラーになった

1.1.前提

使用ソフトバージョン

動作環境 バージョン
Rust 1.82.0
nix 0.29.0
macOS sequoia 15.3.1

プロジェクト構成

.
├── Cargo.lock
├── Cargo.toml
├── README.md
└── src
    └── main.rs

1.2.ハマった時

ハマった時のファイルへの記述

main.rsのクレート呼び出し

use nix::pty::{openpty, OpenptyResult};

cargo.tomlのdependencies

[dependencies]
nix = "0.29.0"

実行結果

エラーになる

error[E0432]: unresolved import `nix::pty`
   --> src/main.rs:1:10
    |
1   | use nix::pty::{openpty, OpenptyResult};
    |          ^^^ could not find `pty` in `nix`

1.3.解決策

修正部分

cargo.tomlのdependencies

[dependencies]
nix = {version = "0.29.0", features = ["term"]} 

これでコンパイルが通るようになる

2.参考:forkの場合

2.1.ハマった時

main.rsのクレート呼び出し

use nix::pty::{openpty, OpenptyResult};
use nix::unistd::{fork, ForkResult};

cargo.tomlのdependencies

[dependencies]
nix = "0.29.0"

2.2.解決策

修正部分

cargo.tomlのdependencies

[dependencies]
nix = {version = "0.29.0", features = ["term","process"]}

これでforkもコンパイルが通るようになる

3.原因考察(筆者の完全な備忘録)

クレートの構成によって、機能によってはcargo.tomlでの有効化が必要っぽい
クレートの呼び出しのこういう仕様はThe Rust Programming languageに書いてある内容な気がする
ちゃんと読まないとダメですね

注意

コンパイルエラーの解決に時間がかかり使えるかどうかまではみれていない

Discussion

ログインするとコメントできます