サイモン!お気持ち察します; Linuxの学習のこの部分にも苦労しました。私自身の経験に基づいて、あなたが対処するいくつかの項目に関するチュートリアルを作成しました(主に自分自身への参照として!):http : //easyaspy.blogspot.com/2008/12/buildinginstalling-application-from.html。Pythonアプリケーションを構築/インストールするのがいかに簡単であるかについての私のメモに感謝するでしょう。:)
これが役立つことを願っています!そして、ハッピーコンパイル。
ティム・ジョーンズ
Ubuntu Linuxでソースからアプリケーションをビルド/インストールする
Ubuntuリポジトリには優れたアプリケーションがぎっしり詰まっていますが、リポジトリにない(またはDebianパッケージがない)必要なツールに出くわすこともあるでしょう。リポジトリよりも新しいバージョン。職業はなんですか?さて、ソースからアプリケーションを構築する必要があります!心配する必要はありません。実際にはそれほど複雑ではありません。ランクアマチュアになってからの私の経験に基づいて、いくつかのヒントを紹介します!(この例ではUbuntuを使用していますが、一般的な概念は、FedoraなどのほとんどのUnix / Linuxディストリビューションや、Windows上のCygwinプラットフォームにも適用できるはずです。)
ソースからほとんどのアプリケーションを構築(コンパイル)する基本プロセスは、configure-> compile-> installのシーケンスに従います。これらを行うための典型的なUnix / Linuxコマンドは、config
-> make
-> make install
です。場合によっては、これらすべてを1つのコマンドに結合できることを示すWebページもあります。
$ config && make && make install
もちろん、このコマンドは、これらの手順のいずれにも問題がないことを前提としています。ここからが楽しみです!
入門
以前にシステムのソースからアプリケーションをコンパイルしたことがない場合は、おそらくgcc
コンパイラスイートなどの一般的な開発ツール、いくつかの一般的なヘッダーファイル(これは既に記述されたコードと考えてください)インストールしているプログラムで使用されている他の誰か)、およびmakeツール。幸いなことに、Ubuntuには、build-essential
これをインストールするというメタパッケージがあります。それをインストールするには(または、すでに持っていることを確認してください!)、ターミナルで次のコマンドを実行します。
$ sudo apt-get install build-essential
基本的なセットアップが完了したので、アプリケーションのソースファイルをダウンロードし、「ホーム」ディレクトリなどの読み取り/書き込み権限を持つディレクトリに保存します。通常、これらは、いずれかのファイル拡張子を持つアーカイブファイルになります.tar.gz
か.tar.bz2
。これは、.tar
単に「テープアーカイブ」であることを意味します。これは、相対的なディレクトリ構造を保持するファイルのグループです。.gz
これは、人気のあるUnix / Linux圧縮形式であるgzip(GNU zip)の略です。同様に、.bz2
bzip2 の略で、gzipよりも高い圧縮(圧縮ファイルサイズが小さい)を提供する新しい圧縮形式です。
ソースファイルをダウンロードしたら、ターミナルウィンドウ(Ubuntuメニューの[システムターミナル])を開き、ファイルを保存したディレクトリに移動します。(~/download
この例で使用します。ここでは、「〜」は「ホーム」ディレクトリへのショートカットです。)tarコマンドを使用して、ダウンロードしたアーカイブファイルからファイルを抽出します。
ファイルがgzipアーカイブ(たとえば、で終わる.tar.gz
)の場合、次のコマンドを使用します。
$ tar -zxvf filename.tar.gz
ファイルがbzip2アーカイブ(たとえば、で終わる.tar.bz2
)の場合、次のコマンドを使用します。
$ tar -jxvf filename.tar.gz
ヒント:アーカイブを抽出するためのすべてのコマンドラインスイッチを覚える必要がない場合は、dtrx(私のお気に入り!)またはdeco(より一般的)のユーティリティのいずれか(または両方)を入手することをお勧めします。これらのユーティリティのいずれかを使用すると、ユーティリティの名前(dtrxまたはdeco)とファイル名を入力するだけで、残りのすべてが実行されます。これらは両方とも、遭遇する可能性が高いアーカイブ形式のほとんどを処理する方法を「知って」おり、優れたエラー処理を備えています。
ソースからビルドする場合、発生する可能性のある2つの一般的なタイプのエラーがあります。
- 構成スクリプト(通常はconfigまたはconfigureという名前)を実行して、セットアップに固有のメイクファイルを作成すると、構成エラーが発生します。
- makeコマンドを実行すると(メイクファイルが生成された後)コンパイラエラーが発生し、コンパイラは必要なコードを見つけることができません。
これらのそれぞれを見て、それらを解決する方法について説明します。
構成および構成エラー
ソースコードアーカイブファイルを抽出したら、ターミナルで、抽出したファイルを含むディレクトリに変更する必要があります。通常、このディレクトリ名はファイルの名前と同じです(.tar.gz
または.tar.bz2
拡張子なし)。ただし、ディレクトリ名は、バージョン情報のないアプリケーションの名前にすぎない場合があります。
ソースディレクトリで、README
ファイルまたはINSTALL
ファイル(あるいはその両方)を探します。通常、これらのファイルには、依存関係に関する情報など、アプリケーションのビルド/コンパイルおよびインストール方法に関する有用な情報が含まれています。「依存関係」は、正常にコンパイルするために必要な他のコンポーネントまたはライブラリの単なる名前です。
README
and / or INSTALL
ファイルを読んだ後(そして、アプリケーションに関連するオンラインドキュメントを調べたら)、config
またはという名前の実行可能ファイル(ファイルに "x"権限が設定されている)を探しますconfigure
。ファイルには.sh
(などの)拡張子が付いている場合がありますconfig.sh
。これは通常、他のユーティリティを実行して、コンパイルに「健全な」環境があることを確認するシェルスクリプトです。つまり、必要なものがすべてインストールされていることを確認します。
ヒント:これが設定ファイルではなくPythonベースのアプリケーションである場合、という名前のファイルを見つける必要がありますsetup.py
。Pythonアプリケーションは通常、インストールが非常に簡単です。このアプリケーションをルートとしてインストールするには(たとえば、Ubuntuの下で次のコマンドの前にsudoを置きます)、このコマンドを実行します。
$ python setup.py install
それがあなたがする必要があるすべてであるべきです。このチュートリアルの残りの部分をスキップして、アプリケーションの使用と使用に直接進むことができます。
ターミナルで構成スクリプトを実行します。通常、通常のユーザーアカウントで構成スクリプトを実行できます(実行すべきです!)。
$ ./config
スクリプトは、何をしているのかを知るためのメッセージを表示します。多くの場合、スクリプトは成功したか失敗したかを示し、失敗した場合は失敗の原因に関する情報を提供します。エラーメッセージが表示されない場合は、通常、すべてがうまくいったと想定できます。
構成スクリプトのように見えるスクリプトが見つからない場合、通常、アプリケーションは非常に単純なものであり、プラットフォームに依存しないことを意味します。つまり、提供さMakefile
れているシステムはどのシステムでも動作するはずなので、以下のビルド/コンパイル手順に単純にスキップできます。
例
このチュートリアルでは、アプリケーションの構築時に発生する可能性のあるエラーの種類の例として、Newsbeuterと呼ばれるテキストベースのRSSリーダーを使用します。Newsbeuterの場合、構成スクリプトの名前はconfig.sh
です。システムで実行するconfig.sh
と、次のエラーが発生します。
tester@sitlabcpu22:~/download/newsbeuter-1.3$ ./config.sh
Checking for package sqlite3... not found
You need package sqlite3 in order to compile this program.
Please make sure it is installed.
いくつかの調査を行ったところ、実際にはsqlite3
アプリケーションがインストールされていることがわかりました。ただし、ソースからビルドしようとしているので、これconfig.sh
は実際に探しているのはの開発ライブラリ(ヘッダー)であるというヒントですsqlite3
。Ubuntuでは、ほとんどのパッケージには、で終わる開発対応パッケージが関連付けられています-dev
。(Fedoraなどの他のプラットフォームでは、多くの場合-devel
、開発パッケージにパッケージサフィックスを使用します。)
sqlite3
開発パッケージに適切なパッケージを見つけるにはapt-cache
、Ubuntu のユーティリティ(および同様yum
にFedora のユーティリティ)を使用できます。
tester@sitlabcpu22:~/download/newsbeuter-1.3$ sudo apt-cache search sqlite
このコマンドは結果の非常に大きなリストを返すため、適切なパッケージがどれであるかを判断するために少しの探求作業を行う必要があります。この場合、適切なパッケージはになりますlibsqlite3-dev
。探しているパッケージにはlib
、同じパッケージ名plusの代わりにプレフィックスが付いている場合があることに注意してください-dev
。これは、多くの異なるアプリケーションで使用される可能性のある共有ライブラリを探しているだけだからです。インストールするlibsqlite3-dev
には、ターミナルで典型的なapt-get installコマンドを実行します:
tester@sitlabcpu22:~/download/newsbeuter-1.3$ sudo apt-get install libsqlite3-dev
次に、config.sh
この依存関係の問題を解決し、依存関係の問題がもうないことを確認するために、再度実行する必要があります。(Newsbeuterの場合、ここでは表示しませんが、libcurl4-openssl-dev
パッケージもインストールする必要がありました。)また、開発パッケージ(などlibsqlite3-dev
)をインストールし、関連するアプリケーションパッケージ(たとえば)をインストールしsqlite3
ない場合すでにインストールされている場合、ほとんどのシステムは関連するアプリケーションパッケージを同時に自動的にインストールします。
構成が正常に実行されると、結果として1つ以上のmakeファイルが作成されます。これらのファイルには通常、名前が付けられますMakefile
(Unix / Linuxではファイル名の大文字と小文字が区別されることに注意してください)ビルドパッケージにsrc
などのサブディレクトリが含まれるMakefile
場合、これらの各サブディレクトリにもが含まれます。
ビルドエラーとコンパイルエラー
これで、実際にアプリケーションをコンパイルする準備ができました。これはしばしば「建物」と呼ばれ、その名前は何かを構築する実際のプロセスから借用されています。通常は複数のソースコードファイルであるアプリケーションのさまざまな「部分」が組み合わされて、アプリケーション全体が形成されます。makeユーティリティは、ビルドプロセスを管理し、コンパイラやリンカーなどの他のアプリケーションを呼び出して、実際に作業を行います。ほとんどの場合、構成を実行したディレクトリからmake(通常のユーザーアカウントで)を実行するだけです。(Qtライブラリで書かれたアプリケーションのコンパイルなど、いくつかのケースでは、代わりにqmakeのような別の「ラッパー」アプリケーションを実行する必要があります。再び、README
および/またはINSTALL
ドキュメントの詳細を常に確認してください。)
上記の構成スクリプトと同様に、ターミナルでmake(または同様のユーティリティ)を実行すると、実行中のものに関する警告メッセージと警告とエラーが表示されます。警告は主にアプリケーションの開発者向けであり、違反している標準的な慣行があることを伝えているため、通常は警告を無視できます。通常、これらの警告はアプリケーション機能には影響しません。一方、コンパイラエラーは処理する必要があります。Newsbeuterを使用してmakeを実行すると、しばらく問題はありませんでしたが、エラーが発生しました。
tester@sitlabcpu22:~/download/newsbeuter-1.3$ make
...
c++ -ggdb -I/sw/include -I./include -I./stfl -I./filter -I. -I./xmlrss -Wall -Wextra -DLOCALEDIR=\"/usr/local/share/locale\" -o src/configparser.o -c src/configparser.cpp
c++ -ggdb -I/sw/include -I./include -I./stfl -I./filter -I. -I./xmlrss -Wall -Wextra -DLOCALEDIR=\"/usr/local/share/locale\" -o src/colormanager.o -c src/colormanager.cpp
In file included from ./include/pb_view.h:5,
from src/colormanager.cpp:4:
./include/stflpp.h:5:18: error: stfl.h: No such file or directory
In file included from ./include/pb_view.h:5,
from src/colormanager.cpp:4:
./include/stflpp.h:33: error: ISO C++ forbids declaration of \u2018stfl_form\u2019 with no type
./include/stflpp.h:33: error: expected \u2018;\u2019 before \u2018*\u2019 token
./include/stflpp.h:34: error: ISO C++ forbids declaration of \u2018stfl_ipool\u2019 with no type
./include/stflpp.h:34: error: expected \u2018;\u2019 before \u2018*\u2019 token
make: *** [src/colormanager.o] Error 1
makeプロセスは、最初のエラーが発生するとすぐに停止します。コンパイラエラーの処理は、時には注意が必要な場合があります。問題に関するいくつかの手がかりを得るには、エラーを調べる必要があります。通常、問題は、通常拡張子が.h
またはのヘッダーファイル.hpp
が欠落していることです。上記のエラーの場合、問題はstfl.h
ヘッダーファイルが見つからないということです。この例が示すように、エラーメッセージの最初の行を見て、問題の根本的な原因を見つけるために下に向かって進みます。
Newsbeuterのドキュメント(開始する前に行うべきでしたが、チュートリアルのこの部分はあまり意味がありません!)を見て、STFLと呼ばれるサードパーティライブラリが必要であることがわかりました。それでは、この場合は何をしますか?基本的に、必要なライブラリに対してこのまったく同じプロセスを繰り返します。ライブラリを取得し、そのライブラリに対してconfigure-build-installプロセスを実行してから、目的のアプリケーションのビルドを再開します。たとえば、STFLの場合、libncursesw5-dev
適切にビルドするにはパッケージをインストールする必要がありました。(通常、別の必要なアプリケーションをインストールした後、元のアプリケーションで構成手順をやり直す必要はありませんが、どちらも痛いことはありません。)
STFLツールキットを正常にインストールした後、Newsbeuterのmakeプロセスは正常に実行されました。通常、makeプロセスは、中断したところから(エラーの時点で)ピックアップします。したがって、すでに正常にコンパイルされたファイルは再コンパイルされません。すべてを再コンパイルする場合は、make clean allを実行してコンパイル済みのオブジェクトを削除してから、makeを再度実行します。
インストール中
ビルドプロセスが正常に完了したら、アプリケーションをインストールする準備が整います。ほとんどの場合、ファイルシステムの共通領域(/usr/bin
または/usr/share/bin
、など)にアプリケーションをインストールするには、rootとしてインストールを実行する必要があります。インストールは、プロセス全体の中で最も簡単なステップです。インストールするには、ターミナルで次を実行します。
$ make install
このプロセスの出力でエラーを確認してください。すべてが成功した場合、ターミナルでコマンド名を実行でき、起動します。(GUIアプリケーションの場合は、コマンドラインの最後に&を追加します。そうしないと、アプリケーションの実行が完了するまでターミナルセッションを使用できなくなります。)
ソースからアプリケーションをビルドする場合、通常、UbuntuのGUIメニューにアイコンやショートカットは追加されません。これを手動で追加する必要があります。
そして、それは基本的に、Ubuntuのソースからアプリケーションをビルドおよびインストールするプロセスです(潜在的に反復的ですが)。これを数回行っただけで、2番目の性質になります!