背景
ハードウェア: Jetson orin
コンパイル環境: bazel
内容: ハードウェア エンコードおよびデコード関連の関数を Apollo コードに追加する準備をします。
コンパイル中にエラーが報告されました
external/uuid/xf86drm.h:40:10: fatal error: drm.h: No such file or directory 40 | #include <drm.h>
原因分析
このエラー メッセージは、コンパイラが external/uuid/xf86drm.h ファイルをコンパイルするときに drm.h ファイルを見つけられないことを意味します。これは通常、コンパイル環境が正しく構成されていないか、必要な依存関係が欠落していることが原因です。
まず環境に drm.h があるかどうかを確認し、グローバルに検索します。
sudo find -name "drm.h"
./usr/src/linux-headers-5.10.104-tegra-ubuntu20.04_aarch64/kernel-5.10/include/uapi/drm/drm.h
./usr/src/linux-headers-5.10.104-tegra-ubuntu20.04_aarch64/kernel-5.10/include/config/drm.h
./usr/include/libdrm/drm.h
./usr/include/drm/drm.h
そうでない場合、
Linux では通常、DRM ライブラリはカーネルによって提供されるため、DRM ライブラリ関連のコードをコンパイルする前に、対応するカーネル ヘッダー ファイルをインストールする必要があります。Linux カーネル ヘッダー ファイルは、次のコマンドを使用してインストールできます。
sudo apt-get install linux-headers-$(uname -r)
カーネル ヘッダー ファイルをインストールしても drm.h ファイルが見つからない場合は、drm.h ファイルが配置されているパスがコンパイラの検索パスに追加されていない可能性があります。コンパイル コマンドに次のオプションを追加してみてください。
-I/path/to/drm/include
ここで、「/path/to/drm/include」は drm.h ファイルが配置されているパスです。
解決
ヘッダー ファイルのインクルード パスを BUILD ファイルに追加します。
copts = [
"-I/usr/include/libdrm"
],
それでも問題が解決できない場合は、DRM ライブラリを再インストールするか、カーネルのバージョンをアップグレードしてみてください。