コンパイラ(gcc)のオプションに -mno-cygwin をつけてコンパイルする。
objdump -p "プログラム名" | grep "DLL Name"
copy <連結したいファイル群> "連結後のファイル" (オプション)
連結する元ファイルを単数にした場合は普通のファイルコピーになる。 複数指定するにはワイルドカードを使うか、
"file1.xxx"+"file2.xxx"+"file3.xxx"...
のようにする。オプションは例えば/Aでアスキー形式、/Bでバイナリ形式
として処理する。(詳しくは "copy /?"コマンドを実行してコマンドヘルプ
を見て下さい。)
利用例:
(バイナリの3つのファイルfoo_1.sep,foo_2.sep,foo_3.sepを連結してfoo.exeを作成する場合)
copy foo_1+sep,foo_2.sep+foo_3.sep foo.exe /B
コマンドを実行する行で
command.com /C コマンド (windowsXPの場合は下のほうがよい) cmd.exe /C コマンド
というようにする(拡張子は省略可能)。
なお、MS-DOS標準コマンドとはcopy,dir,del,erase,start,cd,mdなどを指し、
そのうち一部のコマンドはUNIXシェルでも実装されている。
例…if,cd,shift
また、
SHELL=cmd.exe
とすることで一応シェルコマンド自体をMS-DOSプロンプトにすることも可能だが、
これだとまともにコマンドが実行できなくなりますし、MS-DOSプロンプトの動作は
コマンド行での起動と全く同じになります。
それでも使用したいと思う方はこちらのサンプルをご覧下さい。
また、こちらはそのmakefile(一部内容が異なります)と説明、おまけつき圧縮アーカイブになっております。
(詳しい情報は"GNU makeリファレンス"の"コマンドの実行"の項を参照。)
"Options" → "Display options" を開き、"Quick reference"を"Japanese"の 設定にしてOKボタンを押す。
こうすると、ステータスメニューに表示されるコマンドの説明が日本語になる。
また、ヘルプは日本語なのでそれも参考にするとよい。
この設定を保存するには "Save options..."で"options"をチェックしてOKボタ
ンを押す。
(ただしXPでは保存に失敗するようです)
目的の実行ファイルを元ファイルと同じディレクトリにコピーし、 "コンパイラ名"+"元の実行ファイル名" という形にするとよい。
make.exe | grep.exe | |
BCC | BCCmake.exe | BCCgrep.exe |
GCC(GNU) | GNUmake.exe | GNUgrep.exe |
LCC | LCCmake.exe | LCCgrep.exe |
Windowsでは調べたいコマンドの後に" /?"オプションをつけて実行する。 UNIXベースのプログラムでは"--help"オプションをつける。
コマンドベースの環境では常識といえる事なのだが、UNIXの方はともかく、 Win95以降のMicrosoftユーザーなどMS-DOSを昔から使っていない方などは案外 知らない方もおられるのではないだろうか。
コマンドラインでは引数を使ってファイルを指定し、(C,C++の場合)
内部的にはメイン関数の引数に関連させて処理ができる。ではファイル
ドロップでの実行で渡されたファイルをプログラム内部で受け取るのは
どうすればいいのか? 答えは簡単で、これもコマンドラインの引数と
全く同様に処理ができる。すなわち、OSが"プログラムへのファイルドロ
ップ"を、"プログラムへのコマンド引数"として渡して実行するのである。
ちなみにHSPの場合はcmdlineという環境変数を使うことでコマンドラ
インで渡された文字列を取得できる。その他の言語についてはそれぞれ
のリファレンスのコマンドラインオプション(引数)関係の項目を調べる
とよい。
(XPの場合) ipconfig と、コマンドプロンプトで入力する。 (それ以外の場合) winipcfg と、スタートメニューのファイル名を指定して実行で入力する。
このようにvoidを明記するのは一部の厳しいコンパイラ(GCCなど)では指定ミスかわざとかを判断するためにmain(void),void main(),main()などとすると警告メッセージを出してくれるので,判断を誤らないため,また,応用のきくソースを作成するために警告を出さないコンパイラを利用するときでもこのようにする人が多い.
"|"はOR演算子.1,2,4,8...というようにヘッダ等で定義されているフラグでは2進数で合成しても衝突がないため,複数の状態を指定する必要がある場合などに利用されている.
printf( #ifdef JAPANESE "こんにちは!\n" #else "Hello world!\n" #endif ); 答え…
正しい。プリプロセッサによる条件分岐マクロはよくマクロ定義に使われるが,こういう使いかたもできる.この場合JAPANESEが定義されていれば日本語で,そうでなければ英語のメッセージを出力す る.
#define AISATSU printf("こんにちは\n"); と #define AISATSU printf("こんにちは\n") 答え…
どちらも正解.ただし利用するときの形が少し異なる. 前者は
AISATSUでいいが,後者は
AISATSU;としなければならない.プリプロセッサは基本的には単に置換処理をだけなので,セミコロン(";")はあくまで文字列として扱われる.つまりマクロ代入文字にはセミコロン含め全ての文字が含まれる(ただしコメント"//〜","/*〜*/"は一番初めに除去されるのでつけてもよい) 戻る