- ベストアンサー
コンパイルの仕方が分かりません。
とあるC言語で書かれたプログラムのコンパイルをしたいと思っているのですが、うまくいかないので質問させて頂きました。 環境はwindowsです コンパイラは bcc developer という Borland C++ Compiler をGUIで使える簡易IDEを使っているので Borland C++ Compilerと考えてください。VC++での方法でも大丈夫です コンパイルの仕方を検索するとハローワールドレベルのプログラムのコンパイル方法ばかりがでてきてしまいます。ですが、私がしようとしているのはオープンソースの他の方が書かれたものをダウンロードしてきてコンパイルするということなのです。 main関数が存在するファイルを発見し、「ここから全てのファイルがincludeされているんだろうからこれ一つをプロジェクトに加えてコンパイルすればいいのだろう」と考えてコンパイルすると関数の未定義エラーが大量に発生しました。 かといって全てのファイルをプロジェクトに追加するとなると量がとても多いのでかなり大変そうです。大変なのはいいのですが本当に皆さんがそんな方法でやっているのかも分からないし、それでやってもうまくいかないような気がします。 win32APIを使用している部分があったのでwinwosアプリケーションモードでコンパイルしてもやはりダメです。そもそも未定義エラーが出ているのはそれとは関係のないと思われる関数です。 調べてみるとインクルードパスに追加して・・などという記述をインターネットで発見したのですがこの辺りもよく分かりません。 とにかく、ディレクトリ階層が複雑になっている規模のおおきなプログラムのコンパイルの手順が分からないのでこのあたりについてお教え頂きたいです。 よろしくお願いします。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
>商用とオープンソースではソフト開発の仕方自体が違うということなのでしょうか? 分かりませんけどね(笑)。と言うか、要するに今のとこ、提示された情報には不明な点が多い、んです。 (大体ソフトの名前を出したくない、との事なんで) ライセンス的にオープンソース(例えばGPLとかBSDライセンス)のソフトウェアってのは「マルチプラットフォームを意図して」作ってるケースが多いんですよ。だから、Windowsで「しか」動かないVC++とかbccを当てにして作る確率は低いだろう、と言う事です。 CygwinもminGWも、確かWindowsのAPIは使うんで、「win32APIを使用している部分がある」って事自体は別に不思議でもないのでは、とは思います。 >それほどの規模の大きなプログラムは普通bcc,VC++といったコンパイラでコンパイルされることを予期しないため、そういった書き方や構造をしているということでしょうか? いや、bccにはbccなりの、VC++にはVC++なりの方法はあるんでしょう。そっちの方は良く知りませんが。 ただ、例えばソースコードで配布されているようなオープンソースのソフトウェアって「makeファイル」と言われる「何と何をリンクしてコンパイルしてどのディレクトリに配置せよ」と言う「指示ファイル」があるんですよ。ソースコードの中にMakefileとか書かれたファイルがありませんか? その手の無ければ自力でコンパイルしてリンクして……って「クソメンド臭い」作業ですよ(笑)。 大体、 >ホームページ見てもコンパイル方法載ってる部分見当たらなかったです。 ってのが普通に考えると「凄すぎる」って事です(笑)。 状況的にはmakeしろ、って事なんじゃないかなあ。 >教えて頂いたもの検索してみたのですがどちらもコマンドを使うのですね。 >う~ん。それしか手段がないのであれば難しそうですが使い方を覚えるところからはいろうと思います とは言っても……例えばLinuxだったら「3行程度」打つだけで「終わる」んですよ(笑)。 CygwinやminGWでも大体のトコ、 ./configure sudo make make install の3つくらいで終わるでしょう(最低限ですが)。見たら分かってもらえると思いますが「大した量の」コマンドでもありません(ホント、大体このまま、です)。 そうだなあ……。う~ん、例えば敢えて(笑)、オープンソースの麻雀ソフトをサンプルとして紹介しますが、 Netjan: http://linux.softpedia.com/progDownload/Netjan-Download-12198.html こんな感じでしょ?中に「Makefile」ってのがあるの分かるでしょうか?これが「どうやってビルド(コンパイル&リンク)するか」指定したファイルなんですよ。 こう言うのが無いと「自動コンパイル」ってのが出来ないんです。もちろん、bccにはbccなりのやり方があって、VC++にはVC++なりのやり方があるのかもしれませんが、そっちの方はちょっと思いつきませんね。
その他の回答 (3)
- koko_u_u
- ベストアンサー率18% (216/1139)
>あとソフトの名前なのですができればそのソフトを私が改造するというのを >知られたくないというのと、そのソフトの改造方法を検索された時に >このQ&Aが出てきて他の人も簡単に改造できるようになってしまうのが嫌で、 >できれば明かしたくないです。 つまり「こっそり」修正を加えて、「自分だけで」使いたい。 ということですね。 そういう人には、そもそもオープンソースのソフトウェアを使って欲しくはないですが、 ライセンスにそうしてもいいよ。って書いてあるなら私がどうこう言う立場にはありません。
お礼
そういう部分もあるので否定はしません。 でも、「こっそり」っていうほどイヤラシイ感じではないですよ
補足
すいません。 質問の仕方自体がうまくなかったと自分で思いはじめたのでとりあえず今回は回答をここで締め切らせてももらおうと思います。 この場を借りてお礼を言います お二方ありがとうございました。
- cametan_42
- ベストアンサー率62% (162/261)
#1さんの仰っている通りだと思います。 加えて、本当に「オープンソース」なら、コンパイラは恐らくgccの確率が高い、ですよね。bccもVCも使わないと思います。 平たく言うと、本当に「オープンソース」なら、WindowsではCygwin使うか、あるいはminGWで「make」すると思いますよ。それならコンパイラ単体でわざわざコマンド入力して……なんてやんないと思います。 そんなに大量のソースファイルが存在するならなおさら、でしょう。VC++でもmake出来る、って言う話はどっかで聞いたことあるんですけど、使った事が無いので分かりません(笑)。
お礼
回答ありがとうございます。 そうだったんですか!? 商用とオープンソースではソフト開発の仕方自体が違うということなのでしょうか? それとも、それほどの規模の大きなプログラムは普通bcc,VC++といったコンパイラでコンパイルされることを予期しないため、そういった書き方や構造をしているということでしょうか? 今までCのコンパイルというと普通みんなVC++でするものと思っていました。 教えて頂いたもの検索してみたのですがどちらもコマンドを使うのですね。 う~ん。それしか手段がないのであれば難しそうですが使い方を覚えるところからはいろうと思います
- koko_u_u
- ベストアンサー率18% (216/1139)
>私がしようとしているのはオープンソースの他の方が書かれたものを >ダウンロードしてきてコンパイルするということなのです。 そういうモノには大抵 INSTALL とか README とかいう文書が付いていて インストール方法が載っていますが、ないですか? そしてオープンソースなら、そのソフトウェアの名前も言ってしまって 問題ないのでは?
お礼
早速の回答ありがとうございます!! ありました。 なるほど。そんなに丁寧に書いてくれているわけないと思っていたらあるものですね。ただ、エントリポイントはここです。っていう事しか載って無かったです・・ これのコンパイルに挑戦したのがちょっと前の事だったので忘れていたのですが、「そうだwin32アプリだったらwinmain関数からはじまるじゃないか!」って気づいてそっちも試してたのでした。 それがさっき読んだreadmeにかいてあったエントリポイントのファイルだったんですが、やはりできなくて #include hoge.h の部分のhoge.hがオープンできませんっていうエラーがでるわけです。違う階層のフォルダに入っているので当たり前だと思うのですが、どうやったコンパイラがあるフォルダ以下のファイルを検索対象にするかっていう方法が分からないんです。 ホームページ見てもコンパイル方法載ってる部分見当たらなかったです。 あとソフトの名前なのですができればそのソフトを私が改造するというのを知られたくないというのと、そのソフトの改造方法を検索された時にこのQ&Aが出てきて他の人も簡単に改造できるようになってしまうのが嫌で、できれば明かしたくないです。 すいません・・・ でも、もう少し回答待って答えが見つからなければ書こうと思ってます。
お礼
すいません! やってしまってました。 コンパイルの方法ばかり探していたのですが用意するものの所にはしっかりとBorland C++ Builderが必要と書かれていました・・ そして、gccでは現状コンパイルできないようです。 Makefileもごく一部のフォルダにしか入ってませんでした。 一般のオープンソースのソフトと相違があるのは理由があって元々このソフトはオープンソースで公開することを目的として作られたわけではなかった事が大きいと思います。 そして、メイクファイルが存在しないのは今も相当な頻度でソースが更新されつづけているために、その度にすぐメイクできる状態にコンパイルしておくなどという配慮をしている余裕がないからではないかと思います。 とりあえず、ファイルを全て一つの階層にまとめて対処しようかと思っています。 仰ったようにかなり面倒臭い作業になるでしょうけど仕方無いと思っています。
補足
間違えました・・ ×すぐにメイクできる状態にコンパイル ○すぐにリンクできる状態にメイク