• ベストアンサー

コンパイルの仕方が分かりません。

とあるC言語で書かれたプログラムのコンパイルをしたいと思っているのですが、うまくいかないので質問させて頂きました。 環境はwindowsです コンパイラは bcc developer という Borland C++ Compiler をGUIで使える簡易IDEを使っているので Borland C++ Compilerと考えてください。VC++での方法でも大丈夫です コンパイルの仕方を検索するとハローワールドレベルのプログラムのコンパイル方法ばかりがでてきてしまいます。ですが、私がしようとしているのはオープンソースの他の方が書かれたものをダウンロードしてきてコンパイルするということなのです。 main関数が存在するファイルを発見し、「ここから全てのファイルがincludeされているんだろうからこれ一つをプロジェクトに加えてコンパイルすればいいのだろう」と考えてコンパイルすると関数の未定義エラーが大量に発生しました。 かといって全てのファイルをプロジェクトに追加するとなると量がとても多いのでかなり大変そうです。大変なのはいいのですが本当に皆さんがそんな方法でやっているのかも分からないし、それでやってもうまくいかないような気がします。 win32APIを使用している部分があったのでwinwosアプリケーションモードでコンパイルしてもやはりダメです。そもそも未定義エラーが出ているのはそれとは関係のないと思われる関数です。 調べてみるとインクルードパスに追加して・・などという記述をインターネットで発見したのですがこの辺りもよく分かりません。 とにかく、ディレクトリ階層が複雑になっている規模のおおきなプログラムのコンパイルの手順が分からないのでこのあたりについてお教え頂きたいです。 よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.3

>商用とオープンソースではソフト開発の仕方自体が違うということなのでしょうか? 分かりませんけどね(笑)。と言うか、要するに今のとこ、提示された情報には不明な点が多い、んです。 (大体ソフトの名前を出したくない、との事なんで) ライセンス的にオープンソース(例えば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++なりのやり方があるのかもしれませんが、そっちの方はちょっと思いつきませんね。

n_sinniti
質問者

お礼

すいません! やってしまってました。 コンパイルの方法ばかり探していたのですが用意するものの所にはしっかりとBorland C++ Builderが必要と書かれていました・・ そして、gccでは現状コンパイルできないようです。 Makefileもごく一部のフォルダにしか入ってませんでした。 一般のオープンソースのソフトと相違があるのは理由があって元々このソフトはオープンソースで公開することを目的として作られたわけではなかった事が大きいと思います。 そして、メイクファイルが存在しないのは今も相当な頻度でソースが更新されつづけているために、その度にすぐメイクできる状態にコンパイルしておくなどという配慮をしている余裕がないからではないかと思います。 とりあえず、ファイルを全て一つの階層にまとめて対処しようかと思っています。 仰ったようにかなり面倒臭い作業になるでしょうけど仕方無いと思っています。

n_sinniti
質問者

補足

間違えました・・ ×すぐにメイクできる状態にコンパイル ○すぐにリンクできる状態にメイク

その他の回答 (3)

  • koko_u_u
  • ベストアンサー率18% (216/1139)
回答No.4

>あとソフトの名前なのですができればそのソフトを私が改造するというのを >知られたくないというのと、そのソフトの改造方法を検索された時に >このQ&Aが出てきて他の人も簡単に改造できるようになってしまうのが嫌で、 >できれば明かしたくないです。 つまり「こっそり」修正を加えて、「自分だけで」使いたい。 ということですね。 そういう人には、そもそもオープンソースのソフトウェアを使って欲しくはないですが、 ライセンスにそうしてもいいよ。って書いてあるなら私がどうこう言う立場にはありません。

n_sinniti
質問者

お礼

そういう部分もあるので否定はしません。 でも、「こっそり」っていうほどイヤラシイ感じではないですよ

n_sinniti
質問者

補足

すいません。 質問の仕方自体がうまくなかったと自分で思いはじめたのでとりあえず今回は回答をここで締め切らせてももらおうと思います。 この場を借りてお礼を言います お二方ありがとうございました。

回答No.2

#1さんの仰っている通りだと思います。 加えて、本当に「オープンソース」なら、コンパイラは恐らくgccの確率が高い、ですよね。bccもVCも使わないと思います。 平たく言うと、本当に「オープンソース」なら、WindowsではCygwin使うか、あるいはminGWで「make」すると思いますよ。それならコンパイラ単体でわざわざコマンド入力して……なんてやんないと思います。 そんなに大量のソースファイルが存在するならなおさら、でしょう。VC++でもmake出来る、って言う話はどっかで聞いたことあるんですけど、使った事が無いので分かりません(笑)。

n_sinniti
質問者

お礼

回答ありがとうございます。 そうだったんですか!? 商用とオープンソースではソフト開発の仕方自体が違うということなのでしょうか? それとも、それほどの規模の大きなプログラムは普通bcc,VC++といったコンパイラでコンパイルされることを予期しないため、そういった書き方や構造をしているということでしょうか? 今までCのコンパイルというと普通みんなVC++でするものと思っていました。 教えて頂いたもの検索してみたのですがどちらもコマンドを使うのですね。 う~ん。それしか手段がないのであれば難しそうですが使い方を覚えるところからはいろうと思います

  • koko_u_u
  • ベストアンサー率18% (216/1139)
回答No.1

>私がしようとしているのはオープンソースの他の方が書かれたものを >ダウンロードしてきてコンパイルするということなのです。 そういうモノには大抵 INSTALL とか README とかいう文書が付いていて インストール方法が載っていますが、ないですか? そしてオープンソースなら、そのソフトウェアの名前も言ってしまって 問題ないのでは?

n_sinniti
質問者

お礼

早速の回答ありがとうございます!! ありました。 なるほど。そんなに丁寧に書いてくれているわけないと思っていたらあるものですね。ただ、エントリポイントはここです。っていう事しか載って無かったです・・ これのコンパイルに挑戦したのがちょっと前の事だったので忘れていたのですが、「そうだwin32アプリだったらwinmain関数からはじまるじゃないか!」って気づいてそっちも試してたのでした。 それがさっき読んだreadmeにかいてあったエントリポイントのファイルだったんですが、やはりできなくて #include hoge.h の部分のhoge.hがオープンできませんっていうエラーがでるわけです。違う階層のフォルダに入っているので当たり前だと思うのですが、どうやったコンパイラがあるフォルダ以下のファイルを検索対象にするかっていう方法が分からないんです。 ホームページ見てもコンパイル方法載ってる部分見当たらなかったです。 あとソフトの名前なのですができればそのソフトを私が改造するというのを知られたくないというのと、そのソフトの改造方法を検索された時にこのQ&Aが出てきて他の人も簡単に改造できるようになってしまうのが嫌で、できれば明かしたくないです。 すいません・・・ でも、もう少し回答待って答えが見つからなければ書こうと思ってます。

関連するQ&A

  • コンパイル~リンクを行いたいのですが

    freecommandlinetools2というものをインストールしたのですが、それを使用する際 C:\borland\Project\1 にcのソースファイル1_4.cがあるとして 以下のコマンドでコンパイル~リンクまで行う --コマンド-------------------- cd C:\borland\Project\1<enter> set path=C:\borland\bcc55\Bin<enter> bcc32 -I"C:\borland\bcc55\Include" -L"C:\borland\bcc55\Lib" 1_4.c<enter> ---------------------------- コンパイルエラー、リンク時のエラーがなければ C:\borland\Project\1フォルダに2_4.exe が作成されており、 コマンドプロンプトから実行する。 と、書かれていました。 コマンドプロンプトの使用フォルダをCドライブに変更したので、cdはいらないと思い、borland\Project\1でエンターキーを押したのですが、『内部コマンドまたは外部コマンド、操作可能なプログラムまたはバッチファイルとして認識されていません』としかなりません。そもそも<enter>というのは、エンターキーのことで良いのでしょうか? 右も左も判らない状態で、どう調べればいいのかも判らず困っています。 無知で恥ずかしいのですが、どなたかお教え頂けないでしょうか。

  • コマンドプロンプトでのコンパイルの仕方

    BorlandのC++Compilerをダウンロードしたのですがどのようにコンパイル、実行したらいいのかわかりません。コマンドプロンプトでやるんですよね?教えてください!

  • LinuxでC++ファイルをコンパイルできない

    今までWindowsのPCで研究用プログラムを書いていたのですが、 多数のプログラムを同時に動かせるLinuxの大型サーバーが導入されたので、 これを活用したいと考えています。 これまでコンパイラはBorland C++ Compiler5.5を使っていたのですが、 WinSCPとPuTTYを使ってソースコードをサーバーにコピーしてg++でコンパイルすると、 大量のエラーが出てしまいました。 QR分解などを用いて複素数の計算・推定をして統計結果を表示するプログラムなのですが、 複素数の変数を定義する部分でのエラーが多数を占めているようです。 Borland用に書いたプログラムをLinuxで動かすにはどうすればいいのでしょうか?

  • コンパイルができません

    初めてプログラミングの学習をしようと思い、 ある本を購入し学習を始めたばかりなのですが、 いきなり壁にぶち当たりました。 Borland C++ Compiler 5.5のインストールを行い、 簡単なプログラムを作成しコンパイルを行おうとしたところ 『'bcc32'は、内部コマンドまたは外部コマンド、 操作可能なプログラムまたはバッチファイルとして認識されていません。』 とでてしまいます。 インストール手順等に誤りがあるためかと思い、 何度かやり直しましたが、改善されません。 考えられる原因を教えていただきたく 御願い申し上げます。

  • コンパイルエラー

    本日からC++を勉強しはじめました。 使用しているコンパイラはBORLAND C++ COMPILER 5.5 です。 #include<iostream> int main(){ cout<<"hello"; return 0; } 上記をコンパイルすると下記のエラーが出ます。 いったいどこがいけないのでしょうか。 どなたか教えてくださいませ。 Borland C++ 5.5.1 for Win32 Copyright (c) 1993, 2000 Borland 123.c: 致命的エラー F1003 C:\BORLAND\BCC55\include\stdcomp.h 5: error 指令: Must use C++ for STDCOMP.H *** 1 errors in Compile *** *** コンパイル終了 ***

  • VC++で、ソースファイルを追加すると、コンパイルエラーになります。

    こんばんは。 VC++6.0を使い、C言語の勉強をし始めました。新規プロジェクト→Win32 Console Application を作成し、簡単なプログラムを作成しています。 最初からあるソースファイルはコンパイル、実行できます。しかし、後から自分で追加したソースファイルは error C2065: 'printf' : 定義されていない識別子です。 という、エラーが出てしまいます。何かが、関連付けられていないのでしょうか?それとも、新規プロジェクトを作成しなければいけないのでしょうか? 私は、VC++が初めてなので、ぜんぜんわかりません。よろしくお願いします。

  • プログラムの初心者です。コンパイルできません。

    こんにちは。プログラムの勉強を始めたんですけど、コマンドプロンプトをつかってコンパイルしようとしたら、 エラー E2209 list0101.c 5: インクルードファイル'stdio.h'をオープンできない 警告W8065 list0101.c 9:プロトタイプ宣言のない関数'printf'の呼び出し(関数main) とかいうエラーメッセージがでます。本の通りにプログラムを書いたつもりですが、これはいったいなんなんでしょうか?今使ってるのはBorland C++です。これがC++専用なんてことがあったりするんでしょうか?何がなんだかさっぱりわかりません。 よろしくお願いします。

  • Borland C++ Compiler 5.5について(3)

    つい最近Borland C++ Compiler 5.5をインストールしたんですがコンパイルしようとすると test.cpp: エラー E2209 test.cpp 1:インクルードファイル'stdio.h'をオープンできない。 エラー E2268 test.cpp 5:未定義の関数'printf'を呼び出した(関数 main()) *** 2 errors in Compile*** と出てしまうんですがどういうことなんですか? 教えてください。

  • WindowsでコンパイルできるがUNIXではできない

    下記のプログラムは、2^-0.94を計算するものです。 このプログラムはwindows2000のマシンでコンパイルできるのですが、UNIXのマシンだと Unresolved text symbol "pow" というエラーがでてコンパイルできません。 UNIXのマシンは「cc ファイル名」でコンパイルを実行します。 どうすればコンパイルできるようになるのでしょうか。お手数ですが、教えてください。よろしくお願いします。 ※windows2000マシンのコンパイラ:Borland C++ Compiler 5.5 #include <stdio.h> #include <math.h> int main() { int a; double b,c; a=2; b=-0.94; c=pow(a,b); printf("%lf\n",c); return 0; }

  • bcpadでコンパイルできない

    この前学校でbcpadをつかった授業があったので家でやってみようと思い、 Borland C++ Compiler 5.5 とCPad for Borland C++Compiler をインストールして設定もしました。 そしてbcpadに #include<stdio.h> int main(void){ printf("Hello World"); return 0; } と入力し、保存してコンパイルしてみました。 しかし、以下のようなエラーメッセージが出ました。 「コンパイルに失敗しました ファイル"C:Users\aaaa\downloads\Documents\C\hello.exe" は存在しません」 また下のメッセージのところには hello.cpp: Error E2379 hello.cpp 7: Statement missing ; in function main() *** 1 errors in Compile *** と出ていました。 何がダメなのか全くわかりません。 OSはwindows7です。 どなたか詳しい方ご教授をお願いします。

専門家に質問してみよう