プログラミング: 2016年1月アーカイブ

注:前編後編も併せてお読みください。

なんで、うまくいかんのか、cl.exe のエラーメッセージとか見れないと調べようがないやん・・・と諦めてたんだけど・・・

ああ、ちゃんと「Display the commands invoked by the compiler」というオプションあるやん(^^;

俺がバージョン表示と間違えていた -v オプションがまさにそれだった。
これで原因わかるかも・・・と思って実行してみたら。

$ cobc -x -v test2.cob
Loading standard configuration file 'default.conf'
Command line:   c:\usr\local\MinGW\bin\cobc.exe -x -v test2.cob
Preprocessing:  test2.cob -> C:/Users/shinoda/AppData/Local/Temp\cob12176_0.cob
Return status:  0
Parsing:        C:/Users/shinoda/AppData/Local/Temp\cob12176_0.cob (test2.cob)
Return status:  0
Translating:    C:/Users/shinoda/AppData/Local/Temp\cob12176_0.cob -> C:/Users/shinoda/AppData/Local/Temp\cob12176_0.c (test2.cob)
Executing:      cl /c -I "C:\GnuCobol" -I "C:\GnuCobol\build_windows" /MD
                /Fo"C:/Users/shinoda/AppData/Local/Temp\cob12176_0.obj"
                "C:/Users/shinoda/AppData/Local/Temp\cob12176_0.c"
Microsoft(R) C/C++ Optimizing Compiler Version 18.00.30501 for x86
Copyright (C) Microsoft Corporation.  All rights reserved.

cob12176_0.c
C:/Users/shinoda/AppData/Local/Temp\cob12176_0.c(8) : fatal error C1083: include ファイルを開けません。'stdio.h':No such file or directory
Return status:  2

ああ、include ファイルへのパスが通ってないんか・・・

Windows の環境変数に 

C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\include

を追加して、コマンドプロンプトから実行してみると、今度は

C:\Users\shinoda\AppData\Local\Temp\cob13960_0.c(14) : fatal error C1083: includ
e ファイルを開けません。'libcob.h':No such file or directory

だって。うーむ・・・
cl.exe で読み込んでも大丈夫なもんやろか?取り敢えずパス通してやってみようか。

/out:test2.exe
/manifest
/LIBPATH:C:\GnuCobol\build_windows\win32\release
libcob.lib
C:\Users\shinoda\AppData\Local\Temp\cob6096_0.obj
LINK : fatal error LNK1181: 入力ファイル 'libcob.lib' を開けません。
Return status:  2

よしよし。かなり近づいてきたで(笑)
LIBPATH にライブラリのパスを追加すればいいんか?あ、LIBPATH じゃなく環境変数 LIB か。
他にも読み込めない lib ファイルがいくつかあったので、そのパスも全て設定。

C:\usr\local\MinGW\lib
C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\lib
C:\Program Files (x86)\Microsoft SDKs\Windows\v7.1A\Lib

さあ、どうだ!?

'mt' は、内部コマンドまたは外部コマンド、
操作可能なプログラムまたはバッチ ファイルとして認識されていません。

ええ!?

C:\Program Files (x86)\Microsoft SDKs\Windows\v7.1A\Bin

これを PATH に追加か?

C:\GnuCobol\bin>cobc -x -v test2.cob
Loading standard configuration file 'default.conf'
Command line:   cobc -x -v test2.cob
Preprocessing:  test2.cob -> C:\Users\shinoda\AppData\Local\Temp\cob14512_0.cob
Return status:  0
Parsing:        C:\Users\shinoda\AppData\Local\Temp\cob14512_0.cob (test2.cob)
Return status:  0
Translating:    C:\Users\shinoda\AppData\Local\Temp\cob14512_0.cob -> C:\Users\s
hinoda\AppData\Local\Temp\cob14512_0.c (test2.cob)
Executing:      cl /c -I "C:\GnuCobol" -I "C:\GnuCobol\build_windows" /MD
                /Fo"C:\Users\shinoda\AppData\Local\Temp\cob14512_0.obj"
                "C:\Users\shinoda\AppData\Local\Temp\cob14512_0.c"
Microsoft(R) C/C++ Optimizing Compiler Version 18.00.30501 for x86
Copyright (C) Microsoft Corporation.  All rights reserved.

cob14512_0.c
Return status:  0
Executing:      cl /MD /Fe"test2.exe"
                "C:\Users\shinoda\AppData\Local\Temp\cob14512_0.obj" /link
                /manifest /LIBPATH:"C:\GnuCobol\build_windows\win32\release"
                libcob.lib
Microsoft(R) C/C++ Optimizing Compiler Version 18.00.30501 for x86
Copyright (C) Microsoft Corporation.  All rights reserved.

Microsoft (R) Incremental Linker Version 12.00.30501.0
Copyright (C) Microsoft Corporation.  All rights reserved.

/out:test2.exe
/manifest
/LIBPATH:C:\GnuCobol\build_windows\win32\release
libcob.lib
C:\Users\shinoda\AppData\Local\Temp\cob14512_0.obj
Return status:  0
Executing:      mt /manifest "test2.exe.manifest"
                /outputresource:"test2.exe";#1
Microsoft (R) Manifest Tool version 6.1.7716.0
Copyright (c) Microsoft Corporation 2009.
All rights reserved.
Return status:  0

おお!!

正常終了したぞ!!

C:\GnuCobol\bin>dir
 ドライブ C のボリューム ラベルがありません。
 ボリューム シリアル番号は E476-CFF0 です

 C:\GnuCobol\bin のディレクトリ

2016/01/10  13:26    <DIR>          .
2016/01/10  13:26    <DIR>          ..
2015/12/29  08:12            11,776 CBL_OC_DUMP.dll
2015/12/29  08:01           560,640 cobc.exe
2015/12/29  08:01            10,752 cobcrun.exe
2015/12/29  08:01           211,968 libcob.dll
2014/06/20  23:34            78,848 libvbisam.dll
2014/08/28  04:45           462,848 mpir.dll
2014/08/28  05:32           154,624 pdcurses.dll
2016/01/09  22:28               168 test2.cob
2016/01/10  13:26             7,168 test2.exe
               9 個のファイル           1,498,792 バイト
               2 個のディレクトリ  765,126,201,344 バイトの空き領域

おお!!
素晴らしい。test2.exe できてるやん!

早速実行してみる!!

C:\GnuCobol\bin>test2
Hello World!

おお!!!無事実行できましたぞ!!

こんにちわ!!世界!!

というわけで、GnuCOBOL(OpenCOBOL)でちょっとしたテストくらいは出来そうですなあ。

まあ、この COBOL 案件自体、まだ受注したわけでもなんでもないんで、単に休日の1日を無駄にしただけかもしれませんが(笑)

しかし、これ、COBOL しか使えないようなおっさんプログラマが自宅の Windows 機に環境作ろうと思ったらおおごとやで(笑)
VisualStudio とか入れてないと駄目やし(笑)
<インストール作業 前半より続く>

取り敢えずフリーフォーマットで適当なソースを書いてコンパイルしてみる。

$ cobc -x -free test1.cob
'cl' は、内部コマンドまたは外部コマンド、
操作可能なプログラムまたはバッチ ファイルとして認識されていません。

あれあれ???gcc.exe ではなく cl.exe を使ってるなあ。

$ cobc --info
cobc (GnuCOBOL) 2.0.20151025
Copyright (C) 2001-2015 Free Software Foundation, Inc.
Written by Keisuke Nishida, Roger While, Ron Norman, Simon Sobisch
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
Built     Dec 29 2015 00:01:32
Packaged  Oct 25 2015 21:40:28 UTC
C version (Microsoft) 1700

Build information
Build environment        : i686-pc-windows
CC                       : cl
CPPFLAGS                 :
CFLAGS                   : /Zi /nologo /W4 /WX- /O2 /Ob2 /Oi /Ot /Oy-
                           /GL /Gm- /EHsc /MD /GS /fp:precise
                           /Zc:wchar_t /Zc:forScope /Gd /analyze-
LD                       : link.exe
LDFLAGS                  :

GnuCOBOL information
COB_CC                   : cl
COB_CFLAGS               : -I "C:\GnuCobol" -I
                           "C:\GnuCobol\build_windows"
COB_LDFLAGS              : /LIBPATH:"C:\GnuCobol\build_windows\win32\release"
COB_LIBS                 : libcob.lib
COB_CONFIG_DIR           : C:\GnuCobol\config
  env: COB_CONFIG_DIR    : c:/usr/local/MinGW/config
COB_COPY_DIR             : C:\GnuCobol\copy
COB_MSG_FORMAT           : MSC
COB_MODULE_EXT           : dll
COB_EXEEXT               : .exe
64bit-mode               : no
BINARY-C-LONG            : 4 bytes
Extended screen I/O      : pdcurses
Variable format          : 0
Sequential handler       : Internal
ISAM handler             : VBISAM

ああ、最近は COBOL ソースから Windows の MSVC ランタイムで動くバイナリを生成できるようになったんで cl.exe を使うのか。
バージョン下げれば gcc 使うんか。
まあ、cl.exe あるんで、パスだけ通せばええんかな?

ううん・・・
なんか、デフォで C:\GnuCobol の下、見てるから、C:\GnuCobol の下にインストールし直すかな。
ということで、gnu-cobol-2.0_nightly_r697_only_for_testing_purposes_win32_and_x64_vc11_bin.7z を展開したファイルを C:\GnuCobol の下にコピーし直し。

PATH に C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\bin を追加。

関係ないかもしれないけど、C:\GnuCobol\set_env_vs.bat を実行

これで、

       IDENTIFICATION DIVISION.
       PROGRAM-ID. hello.
       PROCEDURE DIVISION.
       DISPLAY "Hello World!".
       STOP RUN.

という内容の test2.cob を作成して

$ cobc -x test2.cob

とか実行したら何のエラーも出さずに終わるんだけど、ありり?何の実行体も出来てないで?

そもそも、gcc 使わないんなら、MinGW 上で実行することに意味あるん?と思って、Windows に同じように cl.exe の場所へのパス通して、ターミナル(コマンドプロンプト)上で、

C:\GnuCobol\bin>cobc -x test2.cob

とかやってみたら、やっぱりエラー(メッセージを・・・だけど)を出さずに終わるんだけど、exe ファイルとか、dll ファイルとか、実行可能なファイルはどこにも出来ていない???
なんじゃ、これ?(^^;

「Enable ALL warnings」オプション付けてやってみる。

$ cobc -x -W test2.cob
test2.cob (5): Warning: DISPLAY statement not terminated by END-DISPLAY

関係ないなあ(^^;

わからん!!

ということで、詳しい神からのご指導をお待ちします。

「OpenCOBOL インストール」とかでググってこのページに辿り着いた人、ごめんなさい。
ということで、このインストール記は未完です(^^;;;

<追記>
と思ったら解決した。<完結編>でどうぞ。
ちょっと事情により、久しぶりに(20数年ぶりだ!!)COBOL のソースを触らないといけないかもしれないので、Windows 7 Professional 64bit に GnuCOBOL(OpenCOBOL)を入れてみることに。

取り敢えず、GnuCOBOL インストールのために必要な、MinGW(Minimalist GNU for Windows)をインストールする。

    • http://sourceforge.net/projects/mingw/files/ から mingw-get-setup.exe (86.5 kB) をダウンロード。
    • C:\usr\local\MinGW ディレクトリを予め作っておく。
    • mingw-get-setup.exe を実行。
    • 「Install」ボタン押下。
    • Installation Directory に「C:\usr\local\MinGW」を指定。(俺、Program Files に入らないプログラムは \usr\local の下に固めてるんで)
    • User Interface Options はそのまんまでええやろ。
    • 「Continue」ボタン押下。インストールマネージャのインストール開始。
    • 「Continue」ボタン押下。
    • MinGW Installation Manager の GUI 画面が開くので、インストールパッケージの選択。

うーむ、FORTRAN とか Ada は取り敢えず要らないんで外しておくか。
ボーイング777や、F-22戦闘機の制御ソフトウェアは Ada で書かれているそうだけど、そんな仕事を受けることは無いので(笑)

mingw-developer-toolkit
mingwe32-base
minigw32-gcc-g++
minigw32-gcc-objc

辺りを入れておけば良いか?(Objective-C も使わんといえば使わんけど(笑))
(ちなみに、mingw-developer-toolkit にチェックしたら、msys-base も自動的にチェックされる。MSYS(Minimal System) は、Windows上で動作する Unix shell(Bash らしい)諸々のユーティリティの統合パッケージであります)

    • チェックをしたら、「Installation」→「Apply Changes」を選択。確認画面が開く。
    • 「Apply」ボタン押下。(インストールには、ネット環境にもよるが数分かかる)
    • 「All Changes were applied successfully」と表示されたら「Close」ボタン押下。

これで上記で選択したプログラムは全部入った。

ここから OpenCOBOL を追加インストールする。
まずは、MSYS 上から以下のコマンドを叩いて、MinGW を最新版にアップデート。

C:\usr\local\MinGW\msys\1.0\msys.bat を実行。

で、コマンドを叩いてみると、

$ mingw-get update
sh: mingw-get: command not found

ありり?

$ echo $PATH
.:/usr/local/bin:/mingw/bin:/bin:/c/Program Files/Trend Micro/AMSP/:/c/ProgramDa
ta/Oracle/Java/javapath:/c/Program Files/Common Files/Microsoft Shared/Windows L
ive:/c/Program Files (x86)/Common Files/Microsoft Shared/Windows Live:/c/Ruby200
-x64/bin:/c/Program Files (x86)/Intel/iCLS Client/:/c/Program Files/Intel/iCLS C
lient/:/c/Windows/system32:/c/Windows:/c/Windows/System32/Wbem:/c/Windows/System
32/WindowsPowerShell/v1.0/:/c/Program Files (x86)/Intel/OpenCL SDK/3.0/bin/x86:/
c/Program Files (x86)/Intel/OpenCL SDK/3.0/bin/x64:/c/Program Files/Intel/Intel(
R) Management Engine Components/DAL:/c/Program Files/Intel/Intel(R) Management E
ngine Components/IPT:/c/Program Files (x86)/Intel/Intel(R) Management Engine Com
ponents/DAL:/c/Program Files (x86)/Intel/Intel(R) Management Engine Components/I
PT:/c/Program Files (x86)/Windows Live/Shared:/c/Program Files/Microsoft SQL Ser
ver/Client SDK/ODBC/110/Tools/Binn/:/c/Program Files (x86)/Microsoft SQL Server/
120/Tools/Binn/:/c/Program Files/Microsoft SQL Server/120/Tools/Binn/:/c/Program
 Files/Microsoft SQL Server/120/DTS/Binn/:/c/Program Files (x86)/Microsoft SQL S
erver/120/Tools/Binn/ManagementStudio/:/c/Program Files (x86)/Microsoft SQL Serv
er/120/DTS/Binn/:/c/Program Files/Microsoft SQL Server/110/Tools/Binn/:/c/Progra
m Files (x86)/Microsoft SDKs/TypeScript/1.0/:/c/Program Files/Microsoft/Web Plat
form Installer/:/c/Program Files (x86)/QuickTime/QTSystem/:/c/Program Files (x86
)/Skype/Phone/:/c/Program Files (x86)/Common Files/Adobe/AGL:/c/Program Files/Ja
va/jdk1.8.0_05/bin

あらら。mingw-get が置いてある、

C:\usr\local\MinGW\bin

へのパスが通って無いんやねえ。
.bachrc に書いてもいいんだけど、全ユーザにかかるところだから、

C:\usr\local\MinGW\msys\1.0\etc\profile 

に書いといた方がいいだろうな。
18行目からを、

if [ $MSYSTEM == MINGW32 ]; then
  export PATH=".:/usr/local/bin:/mingw/bin:/bin:/c/usr/local/MinGW/bin:$PATH"
else
  export PATH=".:/usr/local/bin:/bin:/mingw/bin:/c/usr/local/MinGW/bin:$PATH"
fi

こんな感じで。

$ mingw-get update
Updating catalogue: package-list.xml; (item 1 of 1)
Checking catalogue: mingw32-package-list.xml; (item 2 of 4)
Checking catalogue: mingw32-autoconf.xml; (item 3 of 37)
  <略>
Checking catalogue: msys-base.xml; (item 109 of 111)
Checking catalogue: mingw-developer-toolkit.xml; (item 110 of 111)
Checking catalogue: msys-system-builder.xml; (item 111 of 111)

今度はうまくいった。
続けて、下記コマンド実行。

mingw-get upgrade
mingw-get install mingw32-libpdcurses
mingw-get install mingw32-gmp
mingw-get install mingw32-pdcurses
mingw-get install msys-mintty

ここまでしたら、今入れた mintty を実行して新しいシェル画面を開いた方が操作が楽。
mintty 使わないと、コピー&ペーストもコマンドプロンプトみたいに左上のアイコンの「編集」メニューを使わないといけないので超面倒。
mintty なら、右ボタンメニューからコピー&ペースト等が出来ます。

で、いよいよ OpenCOBOL をインストール。


ここから、

gnu-cobol-2.0_nightly_r697_only_for_testing_purposes_win32_and_x64_vc11_bin.7z

をダウンロードし、7-Zip などを使い解凍/展開。
それを、C:\usr\local\MinGW の下に全部コピー。
C:\usr\local\MinGW\include\gmp.h だけ上書きされた。

で、コマンドラインから COBOL コンパイラを実行してみる。

$ cobc -v
Loading standard configuration file 'default.conf'
Configuration Error
C:\GnuCobol\config\default.conf: No such file or directory

ほう。コンフィグファイルのパスが違うようだ。

$ export COB_CONFIG_DIR=/c/usr/local/MinGW/config

して、ついでに同じ記述を .bashcr にも書いとく。

で、再度実行。

$ cobc -v
Loading standard configuration file 'default.conf'
cobc: Error: No input files

ありゃ?input files を求めてるってことは、-v でバージョン表示じゃないんか?(追記:大文字 V がバージョン表示だった)

$ cobc --version
cobc (GnuCOBOL) 2.0.20151025
Copyright (C) 2001-2015 Free Software Foundation, Inc.
Written by Keisuke Nishida, Roger While, Ron Norman, Simon Sobisch
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
Built     Dec 29 2015 00:01:32
Packaged  Oct 25 2015 21:40:28 UTC
C version (Microsoft) 1700

おお!ちゃんとバージョン表示された。動いてはいるようだな。

<インストール作業 後半に続く>

このアーカイブについて

このページには、2016年1月以降に書かれたブログ記事のうちプログラミングカテゴリに属しているものが含まれています。

前のアーカイブはプログラミング: 2015年12月です。

次のアーカイブはプログラミング: 2016年2月です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。


月別 アーカイブ

電気ウナギ的○○ mobile ver.

携帯版「電気ウナギ的○○」はこちら