1: 2004-10-02 (土) 19:21:18 [5] | 現: 2024-01-08 (月) 12:58:51 ゲスト [6] | ||
---|---|---|---|
Line 1: | Line 1: | ||
- | //Created By Uchan | + | &size(9){Created By Uchan}; |
*Visual C++ コンパイラーをosa_dir2で使ってみた記録 | *Visual C++ コンパイラーをosa_dir2で使ってみた記録 | ||
- | OSASKアプリをC++で作りたくなって、GOのC++コンパイラーを使った。しかし、それがうまく動かないことが発覚し、当初Min-GWを試そうと思ったが、実はこれ、だめコンパイラーらしく、OSASKアプリを作っても例外がでて没。 | + | OSASKアプリをC++で作りたくなって、GOのC++コンパイラーを使いました。しかし、それがうまく動かないことが発覚し、当初Min-GWを試そうと思いましたが、実はこれ、だめコンパイラーらしく、OSASKアプリを作るのは出来ませんでした。 |
ということで、VC++を使うことにしました。 | ということで、VC++を使うことにしました。 | ||
**VC++って高くないの? | **VC++って高くないの? | ||
- | まあ、買うと高いです。ウン千円です。しかし、マイクロソフトから、Visual C++ Toolkit 2003というものが配布されているのです。これは、ビジュアルな開発環境は無いものの、まさしくVC++コンパイラーとリンカーがセットになったもので、ソースファイルがあれば、Visual C++ .NETと同じバイナリが出来ます。(バージョンによる些細な違いはあるでしょうけど。) | + | まあ、買うと高いです。ウン千円です。 |
+ | |||
+ | しか~~し、実はマイクロソフトから、Visual C++ Toolkit 2003というものが配布されているのです。これは、ビジュアルな開発環境は無いものの、まさしくVC++コンパイラーとリンカーがセットになったもので、ソースファイルがあれば、Visual C++ .NETと同じバイナリが出来ます。(バージョンによる些細な違いはあるでしょうけど。) | ||
今回の、「osa_dir2でコンパイルする」目的には、これで十分(というか、ビジュアルな開発環境は意味ない)なので、[[早速ダウソ:http://msdn.microsoft.com/visualc/vctoolkit2003/]]。 | 今回の、「osa_dir2でコンパイルする」目的には、これで十分(というか、ビジュアルな開発環境は意味ない)なので、[[早速ダウソ:http://msdn.microsoft.com/visualc/vctoolkit2003/]]。 | ||
**どうやってosa_dir2に組み込むか。 | **どうやってosa_dir2に組み込むか。 | ||
これが今回の最大問題だったのです。 | これが今回の最大問題だったのです。 | ||
- | まず、ダウソしたVC++(以下VC++)のbinフォルダにあるファイルをすべてosa_dir2のz_toolsフォルダにコピーします。 | + | まず、z_tools内のcom_mak.txtの |
- | そしたら、z_tools内のcom_mak.txtの | + | CC1 = $(TOOLPATH)cc1.exe -I$(INCPATH) $(CC1OPT) -Os -Wall -quiet |
- | CC1 = $(TOOLPATH)cc1.exe -I$(INCPATH) $(CC1OPT) -Os -Wall -quiet | + | |
のしたの行に | のしたの行に | ||
- | CL = $(TOOLPATH)cl.exe -I$(INCPATH) /c | + | CL = $(VCToolKitInstallDir)bin\cl.exe -I$(INCPATH) /c |
と書き足します。 | と書き足します。 | ||
- | %.gas : %.ca Makefile | + | %.ca : %.c Makefile |
- | $(CC1) -o $*.gas $*.ca | + | $(SJISCONV) $*.c $*.ca |
- | %.gas : %.cpa Makefile | + | %.cpa : %.cpp Makefile |
- | $(CC1PLUS) -o $*.gas $*.cpa | + | $(SJISCONV) $*.cpp $*.cpa |
(これは無い場合がある) | (これは無い場合がある) | ||
- | %.nas : %.gas Makefile | + | この2つ(1つの場合がある)それぞれを削除し、 |
- | $(GAS2NASK) $*.gas $*.nas | + | |
%.obj : %.nas Makefile | %.obj : %.nas Makefile | ||
$(NASK) $*.nas $*.obj | $(NASK) $*.nas $*.obj | ||
- | |||
- | この4つ(3つの場合がある)それぞれを削除し、 | ||
- | |||
- | %.cpa : %.cpp Makefile | ||
- | $(SJISCONV) $*.cpp $*.cpa | ||
の下の行に | の下の行に | ||
%.obj : %.c Makefile | %.obj : %.c Makefile | ||
Line 42: | Line 37: | ||
%.obj : %.cpp Makefile | %.obj : %.cpp Makefile | ||
$(CL) $*.cpp | $(CL) $*.cpp | ||
- | を書き足します。 | + | の2つを書き足します。 |
そしたらcom_mak.txtは完成です。 | そしたらcom_mak.txtは完成です。 | ||
Line 63: | Line 58: | ||
削除できたら、それをvcgg00.hという名前で保存します。 | 削除できたら、それをvcgg00.hという名前で保存します。 | ||
- | 今度から、C++でアプリを書くときは、このvcgg00.hをインクルードします。 | + | 今度から、C++でアプリを書くときは、このvcgg00.hをextern "C"でインクルードします。 |
** | ** | ||
これをやれば、みんなもVC++を使って快適にC++プログラムをコンパイルできます。 | これをやれば、みんなもVC++を使って快適にC++プログラムをコンパイルできます。 | ||
+ | |||
+ | **添付ファイルの情報 | ||
+ | vcosadir.sar | ||
+ | |||
+ | VC++コンパイラでのコンパイルに対応したcom_mak.txtとvcgg00.h。CとC++プログラムがコンパイルできる。~ | ||
+ | com_mak.txtはこれまでのcom_mak.txtと入れ替えて使う。(再びGOのコンパイラを使いたくなったときに、入れ替える前のcom_mak.txtが必要になるので、ちゃんとそれも取っておくこと。) | ||
+ | |||
+ | vcgg00.hは、guigui00.hと同じフォルダにコピーする。~ | ||
+ | C++アプリを作るときは、guigui00.hのかわりにvcgg00.hをインクルードするようにする。 | ||
+ | |||
+ | **追記2004.10.4 | ||
+ | この設定だとライブラリが作れないなどの問題があるようです。それを解決するには、まずcl.exeにパスを通し、次に、com_mak.txtの | ||
+ | CL = $(VCToolKitInstallDir)bin\cl.exe -I$(INCPATH) /c | ||
+ | を | ||
+ | CL = cl.exe -I$(INCPATH) -c | ||
+ | とします。これで正常動作するはず。 | ||
+ | パスの通し方は[[ここ:http://www.geocities.co.jp/CollegeLife-Library/2783/index.html]]を参照 | ||
+ | |||
+ | **試行錯誤した結果ようやく実行できたはろーわーるど | ||
+ | |||
+ | -ちなみにMLからダウンロードできるosa_dir2はcom_mak.txtのみの変更ですむようです(extern __inline__ void ... のくだりは存在せず)。 | ||
+ | -VCを持ってる人は先にVCVARS32.BATを実行してからmakeするとパス等は全部面倒みてくれるようです。 | ||
+ | |||
+ | /* "helloc4.cpp":helloをC++言語で記述した例 */ | ||
+ | /* stack:4k malloc:1k */ | ||
+ | |||
+ | /* このソースの説明が"helloc4.txt"に書かれています */ | ||
+ | |||
+ | extern "C" { | ||
+ | #include <guigui00.h> | ||
+ | void OsaskMain(); | ||
+ | } | ||
+ | |||
+ | #define AUTO_MALLOC 0 | ||
+ | |||
+ | class helloc4 { | ||
+ | public: | ||
+ | helloc4(); | ||
+ | ~helloc4(); | ||
+ | }; | ||
+ | |||
+ | helloc4::helloc4() { | ||
+ | struct LIB_WINDOW *window; | ||
+ | struct LIB_TEXTBOX *wintitle, *textbox; | ||
+ | |||
+ | /* ライブラリの初期化(必ず最初にやらなければならない) */ | ||
+ | lib_init(AUTO_MALLOC); | ||
+ | |||
+ | /* ウィンドウのオープン */ | ||
+ | window = lib_openwindow(AUTO_MALLOC, 0x0200, 136, 48); | ||
+ | |||
+ | /* ウィンドウタイトル用のテキストボックスをオープン */ | ||
+ | wintitle = lib_opentextbox(0x1000, AUTO_MALLOC, 0, 7, 1, 0, 0, window, 0x00c0, 0); | ||
+ | |||
+ | /* "hello, world"を表示するためのテキストボックスをオープン */ | ||
+ | textbox = lib_opentextbox(0x0000, AUTO_MALLOC, 0, 12, 1, 16, 16, window, 0x00c0, 0); | ||
+ | |||
+ | /* ウィンドウタイトルを表示 */ | ||
+ | lib_putstring_ASCII(0x0000, 0, 0, wintitle, 0, 0, "helloc4"); | ||
+ | |||
+ | /* メッセージを表示 */ | ||
+ | lib_putstring_ASCII(0x0000, 0, 0, textbox, 0, 0, "hello, world"); | ||
+ | |||
+ | /* 終了 */ | ||
+ | lib_waitsignal(0x0001, 0, 0); | ||
+ | } | ||
+ | |||
+ | helloc4::~helloc4(){} | ||
+ | |||
+ | void OsaskMain() | ||
+ | { | ||
+ | helloc4 hello; | ||
+ | } | ||
*こめんと(意見・質問・間違い指摘・その他何でも。) | *こめんと(意見・質問・間違い指摘・その他何でも。) | ||
+ | -introeみたいにライブラリを使おうとすると、エラーが出る。 -- ''uchan'' SIZE(10){2004-10-03 (日) 15:30:27} | ||
+ | -やっぱVC++は不便な点が多いので、GOがバージョンアップしてC++の不具合が無くなるのを期待。 -- ''uchan'' SIZE(10){2004-10-03 (日) 17:01:06} | ||
+ | -ライブラリ出来ました。VCにパスを通し、CL = cl.exe -I$(INCPATH) -c としました。 -- ''uchan'' SIZE(10){2004-10-04 (月) 07:16:28} | ||
+ | -ものぐさな人に必要な処置を施したosa_dir2改をあげておきます。http://bayside.upper.jp/upload/osasksdk-20041005.lzh -- ''bayside'' SIZE(10){2004-10-05 (火) 22:01:17} | ||
+ | -obj2bim3で"Warning : can't link ??2@YAPAXI@Z"が発生。どうもnewがリンクできていないらしい。 -- ''bayside'' SIZE(10){2004-10-06 (水) 15:17:52} | ||
+ | -つまりnew演算子用のランタイムがVCにあって、それが無いからリンクできないのでしょう。おそらくランタイムはOSに依存するので、VCのランタイムから持ってくるだけでは解決できないと思います。 -- [[K]] SIZE(10){2004-10-06 (水) 15:58:27} | ||
+ | -inline void* operator new(size_t n){ return malloc(n); } でたいていの環境でnewが使えるようになるはづ。 -- [[名無しさん]] SIZE(10){2004-10-06 (水) 17:28:47} | ||
+ | |||
#comment | #comment |
(This host) = http://osask.net