とある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-D …
こんな感じでしょ?中に「Makefile」ってのがあるの分かるでしょうか?これが「どうやってビルド(コンパイル&リンク)するか」指定したファイルなんですよ。
こう言うのが無いと「自動コンパイル」ってのが出来ないんです。もちろん、bccにはbccなりのやり方があって、VC++にはVC++なりのやり方があるのかもしれませんが、そっちの方はちょっと思いつきませんね。
すいません!
やってしまってました。
コンパイルの方法ばかり探していたのですが用意するものの所にはしっかりとBorland C++ Builderが必要と書かれていました・・
そして、gccでは現状コンパイルできないようです。
Makefileもごく一部のフォルダにしか入ってませんでした。
一般のオープンソースのソフトと相違があるのは理由があって元々このソフトはオープンソースで公開することを目的として作られたわけではなかった事が大きいと思います。
そして、メイクファイルが存在しないのは今も相当な頻度でソースが更新されつづけているために、その度にすぐメイクできる状態にコンパイルしておくなどという配慮をしている余裕がないからではないかと思います。
とりあえず、ファイルを全て一つの階層にまとめて対処しようかと思っています。
仰ったようにかなり面倒臭い作業になるでしょうけど仕方無いと思っています。
No.4
- 回答日時:
>あとソフトの名前なのですができればそのソフトを私が改造するというのを
>知られたくないというのと、そのソフトの改造方法を検索された時に
>このQ&Aが出てきて他の人も簡単に改造できるようになってしまうのが嫌で、
>できれば明かしたくないです。
つまり「こっそり」修正を加えて、「自分だけで」使いたい。
ということですね。
そういう人には、そもそもオープンソースのソフトウェアを使って欲しくはないですが、
ライセンスにそうしてもいいよ。って書いてあるなら私がどうこう言う立場にはありません。
この回答への補足
すいません。
質問の仕方自体がうまくなかったと自分で思いはじめたのでとりあえず今回は回答をここで締め切らせてももらおうと思います。
この場を借りてお礼を言います
お二方ありがとうございました。
No.2
- 回答日時:
#1さんの仰っている通りだと思います。
加えて、本当に「オープンソース」なら、コンパイラは恐らくgccの確率が高い、ですよね。bccもVCも使わないと思います。
平たく言うと、本当に「オープンソース」なら、WindowsではCygwin使うか、あるいはminGWで「make」すると思いますよ。それならコンパイラ単体でわざわざコマンド入力して……なんてやんないと思います。
そんなに大量のソースファイルが存在するならなおさら、でしょう。VC++でもmake出来る、って言う話はどっかで聞いたことあるんですけど、使った事が無いので分かりません(笑)。
回答ありがとうございます。
そうだったんですか!?
商用とオープンソースではソフト開発の仕方自体が違うということなのでしょうか?
それとも、それほどの規模の大きなプログラムは普通bcc,VC++といったコンパイラでコンパイルされることを予期しないため、そういった書き方や構造をしているということでしょうか?
今までCのコンパイルというと普通みんなVC++でするものと思っていました。
教えて頂いたもの検索してみたのですがどちらもコマンドを使うのですね。
う~ん。それしか手段がないのであれば難しそうですが使い方を覚えるところからはいろうと思います
No.1
- 回答日時:
>私がしようとしているのはオープンソースの他の方が書かれたものを
>ダウンロードしてきてコンパイルするということなのです。
そういうモノには大抵 INSTALL とか README とかいう文書が付いていて
インストール方法が載っていますが、ないですか?
そしてオープンソースなら、そのソフトウェアの名前も言ってしまって
問題ないのでは?
早速の回答ありがとうございます!!
ありました。
なるほど。そんなに丁寧に書いてくれているわけないと思っていたらあるものですね。ただ、エントリポイントはここです。っていう事しか載って無かったです・・
これのコンパイルに挑戦したのがちょっと前の事だったので忘れていたのですが、「そうだwin32アプリだったらwinmain関数からはじまるじゃないか!」って気づいてそっちも試してたのでした。
それがさっき読んだreadmeにかいてあったエントリポイントのファイルだったんですが、やはりできなくて
#include hoge.h
の部分のhoge.hがオープンできませんっていうエラーがでるわけです。違う階層のフォルダに入っているので当たり前だと思うのですが、どうやったコンパイラがあるフォルダ以下のファイルを検索対象にするかっていう方法が分からないんです。
ホームページ見てもコンパイル方法載ってる部分見当たらなかったです。
あとソフトの名前なのですができればそのソフトを私が改造するというのを知られたくないというのと、そのソフトの改造方法を検索された時にこのQ&Aが出てきて他の人も簡単に改造できるようになってしまうのが嫌で、できれば明かしたくないです。
すいません・・・
でも、もう少し回答待って答えが見つからなければ書こうと思ってます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# プログラム Arduino 1 2022/07/03 11:13
- FX・外国為替取引 MQL5にて謎のエラーが発生!だれか対処を教えてください! 1 2023/03/25 15:59
- C言語・C++・C# Cのコンパイルでコメントアウトをそのままオブジェクトに保持したい 7 2023/08/01 22:22
- その他(プログラミング・Web制作) FORTRAN77の配列(除算) 2 2023/02/01 14:34
- C言語・C++・C# メインプログラムに#include <algorithm>を書いて、 そのメインプログラムが // 3 2023/05/02 11:24
- C言語・C++・C# スタックフレームの消滅 6 2023/05/20 12:33
- C言語・C++・C# ExcelCS 1 2023/01/27 19:47
- Excel(エクセル) vba コンパイル 4 2022/10/27 10:01
- C言語・C++・C# 3×3のラテン方陣をつくるプログラムを作成したのですが、(↓) #include <stdio.h> 5 2023/07/10 01:53
- C言語・C++・C# 参考にいろいろとc言語、c++言語プログラミングでレジストリーを操作したいのですが、無料配布のc++ 3 2022/12/22 01:49
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VBAを何回も作り直して、容量が...
-
C言語でヘッダファイルにグロー...
-
<math.h>があるのにsqrtが・...
-
ILSpyで、デコンパイルできない。
-
Makefile作成時の拡張子.oとは?
-
” OS ビルド ” の意味が分か...
-
PRO*C コンパイルエラー
-
1 つ以上の複数回定義されてい...
-
マクロ コンパイルがグレーバック
-
セミコロンについて
-
「fatal error C1189」を回避す...
-
includeと#include
-
ProCでコンパイルエラーが出ます
-
CImageクラスの使用について
-
sys/types.hの必要性について
-
ビルドとリビルドの違いを教え...
-
不要な #include
-
COBOLプログラムからC関数を呼...
-
C++コンパイル時に『 C1083: in...
-
複数のサブディレクトリを一緒...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
” OS ビルド ” の意味が分か...
-
VBAを何回も作り直して、容量が...
-
「fatal error C1189」を回避す...
-
C言語でヘッダファイルにグロー...
-
Makefile作成時の拡張子.oとは?
-
エクセルVBAではRound...
-
1 つ以上の複数回定義されてい...
-
コンパイルエラー:ユーザ定義...
-
セミコロンについて
-
ILSpyで、デコンパイルできない。
-
[c++] <pthread.h>がinclude で...
-
クリティカルエラー Expressio...
-
マクロ コンパイルがグレーバック
-
PRO*C コンパイルエラー
-
外部シンボル "_main"は未解決です
-
他のLinuxでも動くa.outの作り方
-
<math.h>があるのにsqrtが・...
-
戻り値について
-
pyc 編集 閲覧
-
C++コンパイル時に『 C1083: in...
おすすめ情報