実行モジュール作成に必要なライブラリを探す方法がわかりません

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
雑魚キャラ

実行モジュール作成に必要なライブラリを探す方法がわかりません

#1

投稿記事 by 雑魚キャラ » 14年前

実行モジュール作成に必要なライブラリを探す方法がわかりません。
何か知る手段はあるのでしょうか?

環境:at Ubuntu10.4 on VMWare3.1.4 on Windows7
以下のような簡単なソースを書いて、コンパイルすると、

コード:

//test.c
#include <stdio.h>

int main(void){
    int a=0;
    printf("%dだよ", a);
    return(a);
} 
以下のようなエラーメッセージが表示されます。

$ gcc test.c
test.c:x:xx: error: stdio.h: No such file or directory
test.c: In function 'main':
test.c:x: 警告: incompatible implicit declaration of built-in function 'printf'

解決方法は、ネットを調べると、以下のようにすればよいらしいですが、
$ sudo apt-get install build-essential


私が必要なあるソースをgitで落とした場合に、
ネット検索すると、以下のものを入れなければならないようです。
自分はこのまま素直に入れましたが、"git-core gnupg sun-java6-jd"は
パッケージ?あぷり?ユーティリティーじゃないのかなと思うのですが、
"build-essential"はライブラリですよね???きっと

$ sudo apt-get -y install git-core gnupg sun-java6-jdk flex bison gperf libsdl-dev libesd0-dev libwxgtk2.6-dev build-essential zip curl libncurses5-dev zlib1g-dev valgrind g++

そこで、ネットの書き込みに頼らずにコンパイルを通すのに必要な
ライブラリをインストールする方法を調べようと思ったのですが、
なかなか見つかりません。
必要なライブラリを知る方法を教えていただけないでしょうか?

アバター
ゆーずぃ
記事: 62
登録日時: 14年前
住所: 埼玉県

Re: 実行モジュール作成に必要なライブラリを探す方法がわかりません

#2

投稿記事 by ゆーずぃ » 14年前

"git-core gnupg sun-java6-jd"はJavaの開発キットです。それを入れたのであればJavaのコンパイルなら出来ます。Javaを開発する環境でCをコンパイル…したいわけじゃないと思うので、"build-essential"が何かは知りませんが(多分Cのコンパイル環境詰め合わせかな)、多分根本的に違うものだと思います。



ところで、必要なファイルであればコンパイラが教えてくれてますよ。

error: stdio.h: No such file or directory
「エラー:stdio.hというファイル又はディレクトリが見つかりません」

この場合はstdio.hが入っていないようです。インストール云々というより、コンパイラの読み込み先に足りないヘッダファイルを放り込めばいいと思います。それともヘッダファイル詰め合わせの探し方ですか?

dic
記事: 658
登録日時: 14年前
住所: 宮崎県
連絡を取る:

Re: 実行モジュール作成に必要なライブラリを探す方法がわかりません

#3

投稿記事 by dic » 14年前

コンパイルの方法も知っているし 確信犯でしょ
こういう人物にはどう対処するのがいいのでしょうかねぇ

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 14年前
住所: 東海地方
連絡を取る:

Re: 実行モジュール作成に必要なライブラリを探す方法がわかりません

#4

投稿記事 by softya(ソフト屋) » 14年前

これだけやれば大丈夫なようです。

「Ubuntuに開発環境(gcc)をインストールする - 与太郎プログラマの日記」
http://d.hatena.ne.jp/yotaropg/20070228/1172666927

ドキュメントを含めるならこんな感じ。
「Ubuntuでgccを使うために必要なパッケージ(メモ) - seraphyの日記」
http://d.hatena.ne.jp/seraphy/20090713

>>dicさん。
決め付けは良くないですよ。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

dic
記事: 658
登録日時: 14年前
住所: 宮崎県
連絡を取る:

Re: 実行モジュール作成に必要なライブラリを探す方法がわかりません

#5

投稿記事 by dic » 14年前

>>雑魚キャラさん
失礼しました
ちょっと感情的になっていました

>>softyaさん
気をつけます


文章からするに java やっていてて、合間にcに手をだしたという感じでしょうか
フリーOS環境でgccでの開発する本を紹介して、それを参考にするのがいいのかもしれないと思いました

ISLe
記事: 2650
登録日時: 14年前
連絡を取る:

Re: 実行モジュール作成に必要なライブラリを探す方法がわかりません

#6

投稿記事 by ISLe » 14年前

stdio.hは標準ライブラリの一部なので、これだけ入ってないというのは奇妙ですね。

パッケージがインストール済みであれば
dpkg -S stdio.h
でそれが含まれるパッケージを探せるのですけど、インストールされていないパッケージから調べる方法は分かりませんでした。

Synapticパッケージマネージャで推奨パッケージを調べるというのはどうでしょう。
gccの推奨パッケージにlibc6-devがあります。
gccが見付けられないというのだからインストールされていないか壊れているのでしょう。

(追記)
ネットで調べたのですが、よくあることなんですね。
ウチは公式のISOイメージからクリーンインストールして最初から入ってました。
どこで違ったんでしょう。

(さらに追記)
C言語の標準ライブラリはlibcというのが常識というか伝統なのでそこから追いかけるという手もあります。
その他の独自ライブラリについては、基本的にはlibで始まり後ろに-devの付いたパッケージ名になります。

雑魚キャラ

Re: 実行モジュール作成に必要なライブラリを探す方法がわかりません

#7

投稿記事 by 雑魚キャラ » 14年前

皆さん、ありがとうございました。まだ解決はしていないですが、、、、

イロイロ書いていただき大変助かります。
少しだけ、意見を言わさせていただきますと、
問題解決の答えではなく、どのように調べればよいかを知りたいので
その観点でご回答いただけると大変助かります。
なんで、方法が分ればイイジャン?と思われるかもしれないですが、
人に聞かれたときに、理由を説明できる知識と、
今後、問題にぶつかったときの解決方法を増やしたいと言う所が理由です。
すいません。気を悪くしないでくださいね。

ISLeさんが言われていたように、基本的に開発環境の構築において
コンパイラとライブラリは別々に入れなければならないのでしょうか?
へぇーそうなんですね。
多分そうなんでしょうね。でも、build-essentialや、libtool、manpages-dev?manpages-ja-dev等
が必用です。といわれても。。。なんで?どこに書いてある?という感じなんですよね。

build-essentialはどのヘッダのライブラリを含んでいるか、どこかに記述されているのでしょうか?
私には、その文章を見つけることができませんでした。

>ネットで調べたのですが、よくあることなんですね。
>ウチは公式のISOイメージからクリーンインストールして最初から入ってました。
>どこで違ったんでしょう。
うーーん。VMWareからUbuntuをインストールするときに、システム構成を指定していないような気がしますが、
もしかしたら、最小構成でインストールされたのかもしれないですね。。。。
(上の情報は本当に記憶にないだけで、実際はあったかもしれないです。)


>C言語の標準ライブラリはlibcというのが常識というか伝統なのでそこから追いかけるという手もあります。
>その他の独自ライブラリについては、基本的にはlibで始まり後ろに-devの付いたパッケージ名になります。
以下が標準ライブラリのようですが、まったく何が入っているのか、、、
build-essential
libtool
manpages-dev
manpages-ja-dev


以上の情報しか分りませんでした。引き続きよろしくお願いいたします。

ISLe
記事: 2650
登録日時: 14年前
連絡を取る:

Re: 実行モジュール作成に必要なライブラリを探す方法がわかりません

#8

投稿記事 by ISLe » 14年前

雑魚キャラ さんが書きました:以下が標準ライブラリのようですが、まったく何が入っているのか、、、
build-essential
libtool
manpages-dev
manpages-ja-dev
違います。
build-essentialは開発に必要なパッケージを必須パッケージとして登録してあるパッケージです。このパッケージを使うとひととおりの開発に必要なパッケージをまとめてインストールできるというだけで、このパッケージ自体には特に何も入っていません。
libtoolはライブラリをmakeするときに必要なツールです。パッケージからバイナリを入手できるなら特に必要のないものです。
manpages-dev,manpages-ja-devはmanコマンドを使って読むことのできる開発者用ドキュメントです。manコマンドを使わないなら必要のないものです。

前回の回答の繰り返しになりますが、gccの推奨パッケージにlibc6-devがあります。
パッケージ名から分かりますがlibcの開発者向けパッケージです。
このパッケージにC言語標準ライブラリが入っています。stdio.hもとうぜん含まれています。

前回の回答に、Synapticパッケージマネージャで調べたらどうでしょう、と書きました。
上に書いたことはすべてSynapticパッケージマネージャを使って調べることができます。
パッケージのコンテキストメニューから推奨パッケージが分かります(プロパティにもありますけど)し、プロパティでパッケージに含まれるファイルの一覧を見ることもできます。

ところで、例えばgccを使いたいのであれば
sudo apt-get install gcc
とコマンドを打てば足りないパッケージもインストールしてくれます。
apt-getがついでにこのパッケージもインストールしますと表示して教えてくれます。
その後、(これも前回の回答の繰り返しになりますが)
dpkg -S stdio.h
とコマンドを打てば何が足りなかったのか分かるのではないでしょうか。

gccでコンパイルしたときリンカが、 -lfoo が見付からない、と言ってきたらlibfooが必要です。
(これまた前回の回答の繰り返しになりますが)基本的にlibfoo-devというパッケージになっていると思います。
-devの前にバージョン番号が入っていたりしますからSynapticパッケージマネージャで検索するのが楽だと思います。
パッケージが用意されていなかったときは…改めて質問してください。

ほとんど前回の回答の繰り返しですが、調べ方はひととおり紹介しました。あと何が知りたいのでしょう。
コンパイルエラーが出たときエラーメッセージを見て、一発で必要なパッケージが分かる方法とかでしょうか。
そんな超能力を手に入れることができるのならわたしもぜひ知りたいものですけど。

(追記)
Synapticパッケージマネージャは、『システム』→『システム管理』→『Synapticパッケージマネージャ』から起動することのできるUbuntu標準のGUIパッケージ管理ツールです。

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 14年前
住所: 東海地方
連絡を取る:

Re: 実行モジュール作成に必要なライブラリを探す方法がわかりません

#9

投稿記事 by softya(ソフト屋) » 14年前

究極を言えば、パッケージに頼らず自分で開発環境を導入すればより詳しく開発環境の内容を理解することは出来ますよ。
「GCC, the GNU Compiler Collection - GNU Project - Free Software Foundation (FSF)」
http://gcc.gnu.org/

たぶん、パッケージマネージャの管理外になりますけどね。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

アバター
ゆーずぃ
記事: 62
登録日時: 14年前
住所: 埼玉県

Re: 実行モジュール作成に必要なライブラリを探す方法がわかりません

#10

投稿記事 by ゆーずぃ » 14年前

雑魚キャラ さんが書きました: build-essentialや、libtool、manpages-dev?manpages-ja-dev等
が必用です。といわれても。。。なんで?どこに書いてある?という感じなんですよね。

build-essentialはどのヘッダのライブラリを含んでいるか、どこかに記述されているのでしょうか?
私には、その文章を見つけることができませんでした。
以下が標準ライブラリのようですが、まったく何が入っているのか、、、
build-essential
libtool
manpages-dev
manpages-ja-dev

ネットに頼りたくない、とのことですが、それは無理です。LinuxやUnixだからといって標準で必ず開発ツールが付属しているとは限りません。その時はどうしますか?ネットでその環境に当てはまる開発ツールやパッケージを落として導入すると思います。
ここで大事なのは自分が「何故それを入れなければならないのか」を理解して作業をしているか、です。

理解せずに導入しようとすればいつまで経っても「環境名 C コンパイル出来ない」とググるでしょう。そして何をしているのか理解できないまま説明を鵜呑みにして作業をすると思います。これではいつまで経っても初心者です。

しかし、何が足りなくて何が必要か、それを理解していれば的確に「環境名 hogelib ツール」等と調べることができます。

つまり、必要なのはネットに頼らないこと、ではなく、ネットを活用すること、ではないでしょうか。
(それでも嫌ならパッケージを自作しましょう。)

必要なライブラリが包含されているパッケージ名を一発で知る能力はISLeさんのおっしゃるように、超能力です。そんなものは誰一人として持ち合わせていません。もし雑魚キャラさんが過去にそーゆー方に会っているのであれば、それはその人自身同じ経験をして得た、積み重ねられた知識です。一朝一夕で得られるものではありません。
雑魚キャラさんの目指していらっしゃる「ネットに頼らないこと」というのはそういったものだと思います。
雑魚キャラ さんが書きました: 以下が標準ライブラリのようですが、まったく何が入っているのか、、、
build-essential
libtool
manpages-dev
manpages-ja-dev
そんなものは調べなければ最初から知っている人など開発者以外はいません。そこにネットを使うかReadmeを使うかの差です。大体Readmeだって大元はネットで落としたものでしょうし、他人の知識を借りることは変わりません。

そこで私も前の回答の繰り返しになりますが…。
まずは自分の直面している問題の根本的な原因が分かっていなければ理解も解決も出来ません。まずは何故そのエラーが出たのか、何故それを解決するためにそのライブラリが必要なのか、そのライブラリは何の意味を持っているのか‥それを一つ一つご自身が理解することで人に説明出来る知識を得られます。それはどれだけの上級者であろうと同じです。

build-essential
libtool
manpages-dev
manpages-ja-dev

が必要だと分かっていて存在理由が分かっていないのであれば、それは雑魚キャラさんの理解が追い付いていない証拠です。こいつらが何をするのか、何故こいらが必要なのか、何故こいつらが無いとエラーになるのか…それをネットだろうが本だろうが調べて、ご自身の知識にすること。それがネットに頼らない第一歩だと思います。

もしもそういったことではなく、ただ本当に必要なヘッダの入っているパッケージ名が一発で知りたいだけでしたら長々と大変な失礼を致しました。その際は山籠りか滝行をオススメ致します。

雑魚キャラ

Re: 実行モジュール作成に必要なライブラリを探す方法がわかりません

#11

投稿記事 by 雑魚キャラ » 14年前

なんとなく、先が見えてきました。

ネットでの情報を活用しながら、
結局はtry&errorで、ボチボチやるしかないらしいと
認識して、あせらずジョジョになりたいと思います。

今後ともよろしくお願いいたします。
皆さん、ありがとうございました。

閉鎖

“C言語何でも質問掲示板” へ戻る