アメリエフの技術ブログ

Amelieff Staff Blog

ヘッダファイルが見当たらないエラーを解決しよう【環境構築あるある】

こんにちは、iijm-lです🐰

突然ですが、ここで問題です。
「Linuxを使ってバイオインフォマティクスを始めてみたい!」という方が、
" 1番最初に行き詰まる難関 "といえば、何でしょうか?


それは

解析環境構築

※ 個人の感想です

f:id:iijm-l:20210924191533p:plain:w300
「こんな所でつまずいてるような俺は...俺は.....」

環境構築は慣れないと難しく、その壁を突破するのはかなりのエネルギーが必要です。

 😩 インストールページと同じようにコマンドを打っているのに、入らない!
 😩 なんかメッセージが出てるけど、何が原因なのかよく分からない!
 😩 Error の文字を見ると、戦意喪失!


お気持ち、とても分かります。これは、誰もが通る道なのです。
今日は、よくあるビルドエラーの1つを紹介して、その対処法をまとめたいと思います!

***.h: No such file or directory

ソースコードファイルをダウンロードし、いざmakeコマンドでビルド。
こんな感じのコンパイルエラー、出会ったことありませんか?
configureコマンドでもよく見かけます)

make[1]: Entering directory '/home/amelieff/src/xxxx/xxxx'
g++ -c -O2 -Wall readSet.c -o readSet.o
readSet.c:35:10: fatal error: zlib.h: No such file or directory
   35 | #include <zlib.h>
      |          ^~~~~~~~
compilation terminated.
make[1]: *** [Makefile:20: readSet.o] Error 1
make[1]: Leaving directory '/home/amelieff/src/xxxx/xxxx'
make: *** [Makefile:62: lib-recur] Error 1


上記の例は、「zlib.hというファイルを参照したいけど見つかりませんよ」というメッセージになります。
なるほどそうか。原因はわかりました。

apt-getdnfyumなどのLinuxパッケージマネージャでインストールすれば良いのですが、どんなコマンドを打てば良いのでしょうか?

そんな時は、どのパッケージにそのファイルが入っているのかを調べれば良いのです。

調べ方

Debian系(Ubuntu)

apt-fileコマンドで検索できます。
入っていない場合は、まずダウンロード&アップデートしてから使ってください。

$ sudo apt install apt-file
$ sudo apt-file update


部分一致検索なので、多くの検索結果が出力されます。

$ apt-file search zlib.h
.
.
.
zlib1g-dev: /usr/include/zlib.h


多すぎてどれを入れればいいか迷ってしまう場合は、先頭に/usr/include/を付けて再検索しましょう。

$ apt-file search /usr/include/zlib.h
zlib1g-dev: /usr/include/zlib.h


ここで、zlib1g-dev というパッケージに含まれることがわかりました。
あとは、apt-get でダウンロードすればOKです。

$ sudo apt-get install zlib1g-dev


実は、コマンドを使わなくても、Ubuntuの公式サイトでも検索できます。
Ubuntu – Ubuntu パッケージ検索

RedHat系(CentOS 7)

RHELやCentOS 7以下では、yum providesを使います。
こちらは完全一致検索のため、ワイルドカード(*)を使ってパターンマッチさせることができます。

$ yum provides '*/zlib.h'

.
.
.
zlib-devel-1.2.7-18.el7.x86_64 : Header files and libraries for Zlib development
リポジトリー        : base
一致          :
ファイル名    : /usr/include/zlib.h


パッケージ名zlib-devel が分かったら、yum install でダウンロードすればOKです。

$ sudo yum install zlib-devel



Fedora系(CentOS 8)

yumと同じで、providesを用います。
こちらも、ワイルドカード(*)を使ってパターンマッチさせることができます。

$ dnf provides '*/zlib.h'


パッケージ名zlib-devel が分かったら、dnf install でダウンロードすればOKです。

$ sudo dnf install zlib-devel



まとめ

必要なソフトウェアはインストールドキュメントに書いてあることもありますが、はっきりとは書いてない場合が結構あります。
慣れないうちは、解析を始める前からエラーがたくさん出てしまい、挫折したくなりますよね。
つまづいている方のお役に立てたら幸いです✨

今まで様々な解析環境を構築してきたので、またブログにしたいと思います!