JP4484001B2 - ライブラリ関数バージョン一致方法。 - Google Patents
ライブラリ関数バージョン一致方法。 Download PDFInfo
- Publication number
- JP4484001B2 JP4484001B2 JP19098899A JP19098899A JP4484001B2 JP 4484001 B2 JP4484001 B2 JP 4484001B2 JP 19098899 A JP19098899 A JP 19098899A JP 19098899 A JP19098899 A JP 19098899A JP 4484001 B2 JP4484001 B2 JP 4484001B2
- Authority
- JP
- Japan
- Prior art keywords
- library
- version
- function
- distribution program
- library function
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Expired - Fee Related
Links
Images
Landscapes
- Devices For Executing Special Programs (AREA)
- Stored Programmes (AREA)
Description
【発明の属する技術分野】
本発明は、開発系で開発した配布プログラムを実行系へインストールする際に行われるライブラリ関数のバージョンアップ方法に関し、特に、アプリケーションプログラム開発で用いたライブラリ関数と同一のライブラリ関数を全て実行系に保持することができるライブラリ関数バージョンアップ方法に関する。
【0002】
【従来の技術】
近年、パソコンの普及に伴いソフトウェアの低価格化、大量供給、および早期開発の進展に伴い、ソフトウェアの質の低下、すなわち、ソフトウェアの品質検査を充分行うことなく市場に供給しなければならない状況に至っている。この時、既に市場への提供を済ませているソフトウェアに対して追加や改善を行った部分の置き換え(更新:バージョンアップ)を速やかに実施する必要が生じており、これが重要な技術となってきている。
ここでは、オペレーティングシステムの構成要素も、オペレーティングシステムにアクセスするライブラリも追加・更新の対象となる。
一般に、オペレーティングシステムでは、複数のアプリケーションプログラムを同時期に並行して実行する場合、アプリケーションプログラムが異なるアプリケーションプログラムの命令コードの中に分岐していかないように異なるアドレス空間を割り当てる様になっている。
しかし、多機能化して肥大化したライブラリ関数の命令コードを個別のアプリケーションソフトウェア毎に組み込むと、全く同じ機能を持った命令コードが複数個メモリ上に存在することになり、メモリの使用効率が悪くなってしまう。
ライブラリ関数をアプリケーションプログラムに組み込む場合は、そのアプリケーションプログラムが呼び出しているライブラリ関数だけをライブラリの中から引き出して組み込む様にしているが、入出力処理のような利用頻度の高いものは殆どのアプリケーションプログラムの中にそのライブラリ関数が重なって入ることになってしまう。
そこで、同一のライブラリ関数の命令コード一式をメモリ上に一つだけ置き、各アプリケーションプログラムは、実行権を得ている間にそれらの命令コード一式を利用する方式(ダイナミックリンク)がとられるようになってきている。
この方式では、アプリケーションプログラムを開発する側(開発系と呼ぶ)が利用しているライブラリ関数のバージョンと、開発したアプリケーションプログラムを実行する側(実行系と呼ぶ)が利用しているライブラリ関数のバージョンとが一致するとは限らない。
そこで、ライブラリ関数のバージョンがより新しい場合はより古いバージョンの機能を全て包含していることを前提として、開発したアプリケーションプログラムを実行系にインストールするときに、そのアプリケーションプログラムが利用する開発系のライブラリ関数のバージョンと実行系のライブラリ関数のバージョンとを比較して、開発系のライブラリ関数のバージョンの方が実行系のライブラリ関数のバージョンよりもより新しい場合に、開発系のライブラリ関数を実行系にインストールすることがなされている。
【0003】
上述した開発系のライブラリ関数を実行系にインストールしてバージョンアップする方法の一例について図9を参照して説明する。
図9は、従来のライブラリ関数のバージョンアップ方法の手順を示す図である。
図9において、点線の左側が開発者側の開発系2であり、点線の右側がパソコン等の実行系4である。図9に示す様に、まず、開発者側で、バージョンアップ対象であるライブラリを利用している開発者が開発しているアプリケーションプログラム1とそのバージョンアップ対象のライブラリ3とをコンパイラ5でコンパイルして配布プログラム7を作成する。次に、実行系4においてインストーラ9が上記開発系2から供給された上記配布プログラム7と共にバージョンアップ対象のライブラリ3のインストールを実行すると、上記配布プログラム7が実行系4のハードディスク11のプログラムファイル13に書き込まれると共に、OS15を用いて上記ハードディスク11の実行系ライブラリ(バージョン番号f,1)17を上記バージョンアップ対象のライブラリ(バージョン番号f,2)に書き換えることにより、バージョンアップを行っている。
次に、上記図9に示したバージョンアップ方法の詳細について説明する。
まず、図10〜図13を参照して上記アプリケーションプログラム1のソースコード、バージョンアップ対象のライブラリ3、配布プログラム7、および実行系ライブラリ17について説明する。
図10に示す様に、上記アプリケーションプログラム1のソースコードは、fというライブラリ関数名19をもつライブラリ関数を呼び出す記述を含むC言語で記述したプログラムのソースコードであって、図10ではライブラリ関数名19の関数呼び出しを行う文の記述のみ例示しているが、その全体はC言語の言語処理系で処理可能なプログラムの記述となっていることは言うまでもない。
上記ソースコードをコンパイルする作業を行うアプリケーションプログラム開発者が利用するライブラリが、開発系ライブラリ3であり、その構造例を図11に示す。上記開発系ライブラリ3は、一つのライブラリファイル21でできており、その中には、複数の関数ブロック23がある。関数ブロック23は、その開始と終了が明確になっており、コンパイラ5によって個別に読み出し可能である。
上記関数ブロック23には、関数名フィールド25があり、上記コンパイラ5によって、個別に読み出した関数ブロックの中から読み出し可能である。また、上記関数ブロック23にはバージョンフィールド27があり、その関数ブロック23のバージョンを識別する符号を記録している。上記バージョンを識別する符号としては、その関数ブロック23を開発した日付時刻など、ライブラリ関数開発の新旧関係を識別可能な情報が用いられる。上記開発系ライブラリ3の中で、同一の関数名が関数名フィールド25に書き込まれている関数ブロック23が複数個重複して存在するようなことはない。
【0004】
次に、アプリケーションプログラム開発者は、上記アプリケーションプログラム1のソースコードを作成する作業を終えると、上記コンパイラ5の入力に上記ソースコードと開発系ライブラリ3を与えてコンパイラ5を起動し、上記コンパイラ5は処理を終了すると、配布プログラム7を生成するわけであるが、このコンパイラ5の処理手順の例を、図14を参照して以下に説明する。
図14のステップ101において、上記コンパイラ5は、処理を開始するとまずソースコード読み込み処理を実行する。上記ソースコード読み込み処理は、アプリケーションプログラム開発者がコンパイラ5に入力として与えた上記ソースコードを、先頭から読み込みコンパイルする。
次に、ステップ103において、読み込んだ部分がライブラリ関数呼び出しの形式であるかどうかをライブラリ呼び出し判定処理で判定し、このライブラリ呼び出し判定処理の判定の結果、読み込んだ部分がライブラリ関数呼び出し処理でなかった場合は、一般コード生成処理を実行する(ステップ105)。上記一般コード生成処理は、ライブラリ関数呼び出し以外のC言語にしたがう記述を命令コードにコンパイルする処理である。
上記ステップ103において、読み込んだ部分がライブラリ関数呼び出しであった場合、ステップ107においてライブラリ呼び出し命令生成処理を実行する。上記ライブラリ呼び出し命令生成処理は、図10に示したソースコード(ライブラリ関数名19がfであるライブラリ関数を呼び出す処理)を図12に示す配布プログラムにコンパイルし、その配布プログラム7に命令コードを書き込む。
【0005】
従来技術におけるコンパイラ5は、ライブラリ関数名19をfとするライブラリ関数を呼び出す部分を、図12に示すように、そのライブラリ関数名19に応じたライブラリ参照フィールド29を持つライブラリ呼び出し命令31に変換している。
次に、ステップ109において、上記コンパイラ5は、ソースコード読み込み処理(ステップ101)で読み込み、一般コード生成処理(ステップ105)またはライブラリ呼び出し命令生成処理(ステップ107)で命令コードを生成した読み込み部分が、入力しているソースコード4の最後の部分であるかどうかを処理終了判定処理で判定し、最後の部分でなかったならば再び上記ステップ101のソースコード読み込み処理から処理を行い、最後の部分であったならば、配布プログラム7の生成を完了して、コンパイラ5の処理を終了する。
【0006】
次に、アプリケーションプログラム開発者がアプリケーションプログラムの開発を終了した後に、アプリケーションプログラム利用者が利用できるようにするには、コンパイル処理を行った後にできあがった配布プログラム7を実行系にインストールするわけであるが、このインストーラ9によるインストール処理について図15を参照して以下に説明する。
まず、図15のステップ111において、上記インストーラ9は、処理を開始すると、まず上記配布プログラム7の複写処理を実行する。この配布プログラムの複写処理は、上記配布プログラム7を実行系が読み取って実行可能な場所および格納形式でプログラムファイル13に複写するものである。ここでは、単純に、配布プログラム7と全く同一の形式とする。
上記インストーラ9は、次に、ステップ113において、上記配布プログラム7が利用するライブラリ関数のバージョン番号を検出するバージョン番号の検出処理を実行する。この検出処理においては、上記インストーラ9は上記配布プログラム7を読み取り、その中からライブラリ呼び出し命令31(図12参照)を識別し、その中のライブラリ参照フィールド29を読み出して、呼び出すライブラリ関数名19を識別し、そのライブラリ関数名19と同一名称の上記開発系ライブラリ3の関数名フィールド25を有する関数ブロック23をライブラリファイル21から呼び出し、そのバージョンフィールド27を読み出して、利用するバージョン番号を検出する。
【0007】
ここで、上記インストーラ9は、上記実行系4の側で動作する。そして、上記配布プログラム7と開発系ライブラリ3のライブラリファイル21を一つの可搬媒体に記録しておくなどの措置をとり、上記インストーラ9が開発系ライブラリ3のライブラリファイル21を読み取り可能としておく。
上記インストーラ9は、次に、ステップ115において、上記実行系4の中の規定位置に格納してある実行系ライブラリ17のライブラリファイル33(図13参照)を読み取り、上記開発系ライブラリ3のライブラリファイル21に対して行ったのと同様にして、実行系ライブラリ17の中から、呼び出すライブラリ関数名19と同じ名称の関数名フィールド35を有する関数ブロック37を読み取り、その中のバージョンフィールド39を読み取ってインストールしたアプリケーションプログラムが利用可能なバージョン番号のライブラリを検出する。
上記インストーラ9は、利用可能バージョン番号検出処理(ステップ115)において、上記実行系ライブラリ17の関数ブロック37をライブラリファイル33の中に見いだすことがなかった場合は、ステップ117において、利用可能バージョン番号の検出成否判定処理で検出無しと判定し、この場合は、開発系ライブラリ3から読み取った関数ブロック23を実行系ライブラリ17のライブラリファイル35の中に無条件に追加するライブラリの複写処理を実行する(ステップ119)。
【0008】
そして、上記ステップ117の利用可能バージョン番号の検出成否判定処理で検出有りと判定した場合は、開発系ライブラリ3のライブラリファイル21の関数ブロック23のバージョンフィールド27から読み取ったバージョン番号と、上記実行系ライブラリ17のライブラリファイル33の関数ブロック37のバージョンフィールド39から読み取ったバージョン番号とを比較する利用可能判定処理を実行する(ステップ121)。
上記利用可能判定処理は、利用可能バージョン番号が利用するバージョン番号よりもより小さな値であり、利用可能バージョン番号の方がより古いことを示している場合ならば、ステップ123においてライブラリの上書き処理を実行する。
上記ライブラリ上書き処理では、上記実行系ライブラリ17のライブラリファイル33の中から利用可能バージョン番号の検出処理(ステップ115)で読み取った関数ブロック37と同じ格納位置に、上記開発系ライブラリ3のライブラリファイル21の中から利用するバージョン番号の検出処理(ステップ113)で読み取った関数ブロック23を上書きする。
図15に示した例では、一つのライブラリ関数についてのみ処理するようにしているが、利用するバージョンの検出処理(ステップ113)以降の処理を、上記配布プログラム7の中のライブラリ呼出命令全てについて適用することで、複数のライブラリ関数について処理することができる。
上記実行系ライブラリ17の例を図13に示す。従来方式の実行系ライブラリ17の形式は、図11に示す従来方式の開発系ライブラリの例と同じ形式となる。
【0009】
次に、上記従来技術の実行系4の動作処理について図16を参照して説明する。
上記実行系4を操作してアプリケーションプログラムを起動する利用者が、上記実行系4に対する入力として、上記インストーラ9が作成したプログラムファイル13を指定して、上記実行系4の処理を起動すると、起動した実行系4は、まずプログラムファイル13をメモリ上に読み込む、プログラムのロードを実行する(ステップ125)。
このプログラムのロードが終わると、上記実行系4は、ロードしたプログラムファイル13の内容である命令コードを解析して、実行すべき命令コードを特定する命令の解析処理を行う(ステップ127)。その結果、実行すべき命令コードがライブラリ呼出命令であるかどうかを、ステップ129のライブラリ呼出判定処理で判定し、ライブラリ呼出命令でなければ一般命令の実行を行う(ステップ131)。一般命令の実行では、ライブラリ呼出命令以外の全ての命令コードの実行を行う。
上記ステップ129におけるライブラリ呼出判定処理でライブラリ呼出命令であると判定した場合は、その命令コードのライブラリ参照フィールドを読み出し、読み出すライブラリ関数名を識別し、そのライブラリ関数名と同じ名称の関数名フィールド35を有する関数ブロック37のコードエリア41を実行系ライブラリ17のライブラリファイル33から読み取り、メモリ上にロードする、ライブラリのロードを行う(ステップ133)。上記ライブラリのロードでは、すでにメモリ上に同一名称のライブラリ関数があれば、そのライブラリ関数のコードエリアのメモリ上へのロードは行わない。
【0010】
上記ライブラリのロードを終えると、上記実行系4は、ライブラリのロードでコードエリア41からメモリ上にロードした命令コードの列、もしくは既にメモリ上に存在していた場合には、コードエリア41からメモリ上にロードしたときに相当する命令コードの列を実行するライブラリの実行を行う(ステップ135)。
次に、一般命令の実行若しくはライブラリの実行を行った実行系4は、その結果処理が終了するかどうかを判定する実行終了判定処理を行い(ステップ137)、終了しないと判定したならば引き続く命令コードを識別して命令の解析(ステップ127)からの処理を再び行う。終了すると判定したならば、上記実行系4は処理を終了する。
以上のようにして、従来技術では、アプリケーションプログラムを開発する開発系2が有するライブラリ関数のバージョンと、アプリケーションプログラムを実行する実行系4が有するライブラリ関数のバージョンに違いがあったとしても、インストール時により新しいバージョンに実行系4が有するライブラリ関数を更新することによって、従来から実行系4に存在するアプリケーションプログラムの動作も新しく開発したアプリケーションプログラムの動作もともに可能にしていた。
【0011】
【発明が解決しようとする課題】
しかしながら、以上述べた従来技術では、ライブラリ関数のバージョンがより新しい場合は古いバージョンの機能を全て包含していることが、新しいバージョンのライブラリ関数の開発において保証できない場合、新しいアプリケーションプログラムを実行系にインストールするときに行うライブラリの上書き処理(図15のステップ123)の結果、新しくインストールしたアプリケーションプログラムは正常に動作するものの、実行系に既に存在していたアプリケーションプログラムのいくつかの動作が正常でなくなってしまう問題があった。
すなわち、上述した従来技術では、実行系ライブラリを新しいバージョンに更新する時に、古いバージョンのライブラリの上に上書きするために古いバージョンのライブラリ関数を用いるアプリケーションプログラムが正常に実行できなくなってしまうものであった。
この様な状況が生じるのは、新しいバージョンのライブラリ関数を開発する開発者は、通常、旧版との互換性を意識して開発を進めるのが一般的であるが、新しい機能を実現するために、必ずしも古いバージョンのライブラリ関数の全機能をそのまま踏襲できるとは限らないからである。
本発明は、上記事情に鑑みてなされたものであって、アプリケーションプログラム開発で用いたライブラリ関数と同一のライブラリ関数を全て実行系に保持することができるライブラリ関数バージョンアップ方法を提供することを目的とする。
【0012】
【課題を解決するための手段】
上記目的を達成するため、本発明は、開発系コンピュータで開発された配布プログラムと前記配布プログラムを実行系コンピュータで実行する際に利用するライブラリ関数であって開発時に使用したものとを記録しているインストーラを、実行系コンピュータへ供給し、前記実行系コンピュータの操作者が前記配布プログラムの前記インストーラを起動し、前記実行系コンピュータへインストールする際に、上記実行系コンピュータのライブラリに保持されているライブラリ関数を上記配布プログラムで使われるライブラリ関数のバージョンに一致させるライブラリ関数バージョン一致方法において、前記開発系コンピュータにて前記配布プログラムに使用するライブラリ関数のバージョンを前記配布プログラム内に記述しておき、前記実行系コンピュータへ前記配布プログラムをインストールする際に、前記インストーラが前記配布プログラムに使用するライブラリ関数とそのバージョンを検出し、当該ライブラリ関数に対応する前記実行系コンピュータのライブラリに保持されているライブラリ関数とそのバージョンを検出し、ライブラリ関数とバージョンが一致したときは、前記実行系コンピュータのライブラリへ前記配布プログラムにおいて使用されるバージョンのライブラリ関数の追記は行わず、ライブラリ関数のバージョンが一致するものが存在しないときのみ、前記実行系コンピュータのライブラリをそのまま保持し、前記実行系コンピュータのライブラリへ前記配布プログラムにおいて使用されるバージョンのライブラリ関数を前記インストーラから追記する様にしたことを特徴とする。
【0013】
【発明の実施の形態】
以下、本発明を図示した実施形態に基づいて説明する。図1は、本発明によるライブラリ関数のバージョンアップ方法の一実施形態の手順を示す図である。
本発明によるライブラリ関数のバージョンアップ方法の要点は、配布プログラムにライブラリ関数のバージョン番号を付けて実行系へ配布し、インストール時に古いバージョンのライブラリ関数に追記して新しいバージョンのライブラリ関数を実行系ライブラリに書き込む様にしたことである。
すなわち、図1に示す様に、点線の左側を開発者側の開発系52とし、点線の右側をパソコン等の実行系54とした場合、まず、開発者側で、バージョンアップ対象であるライブラリを利用している開発者が開発しているアプリケーションプログラム51とバージョンアップ対象のライブラリ53とをコンパイラ55でコンパイルして配布プログラム57を作成する。ここで、上記配布プログラム57は、図4において後述する如くに、そのライブラリ呼出命令71中に呼び出すライブラリ関数のバージョンを指定する関数バージョンフィールド73を有している。
次に、上記開発系52から実行系54のインストーラ59へ上記配布プログラム57と共にバージョンアップ対象のライブラリ53がインストールされると、上記配布プログラム57が実行系54のハードディスク61のプログラムファイル63に書き込まれると共に、後述する如くに、OS65を用いて上記ハードディスク61の実行系ライブラリ67に、図5に示す様に、上記バージョンアップ対象のライブラリ(バージョン番号f,2)を追記する。
【0014】
次に、上記図1に示したバージョンアップ方法の詳細について説明する。まず、図2〜図5を参照して上記アプリケーションプログラム51のソースコード、バージョンアップ対象のライブラリ53、配布プログラム57、および実行系ライブラリ67について説明する。
図2に示す様に、上記アプリケーションプログラム51のソースコードは、fというライブラリ関数名19をもつライブラリ関数を呼び出す記述を持つC言語で記述したプログラムのソースコードであって、図2では、ライブラリ関数名19の関数呼び出しを行う文の記述のみ例示しているが、その全体はC言語の言語処理系で処理可能なプログラムの記述となっている。
上記ソースコードをコンパイルする作業を行うアプリケーションプログラム開発者が利用するライブラリが、開発系ライブラリ53であり、その構造例を図3に示している。開発系ライブラリ53は、一つのライブラリファイル21でできており、その中には、複数の関数ブロック23がある。関数ブロック23は、その開始と終了が明確になっており、コンパイラ55によって個別に読み出し可能である。
上記関数ブロック23には、関数名フィールド25があり、上記コンパイラ55によって、個別に読み出した関数ブロックの中から読み出し可能である。また、上記関数ブロック23にはバージョンフィールド27があり、その関数ブロック23のバージョンを識別する番号を記録している。バージョンを識別する番号としては、その関数ブロック23を開発した日付時刻など、ライブラリ関数開発の新旧関係を識別可能な情報が用いられる。
【0015】
次に、上記アプリケーションプログラム開発者は、上記アプリケーションプログラム51のソースコードを作成する作業を終えると、上記コンパイラ55の入力にソースコードと開発系ライブラリ53を与えてコンパイラ55を起動し、コンパイラ55の処理が終了すると、配布プログラム57を生成するわけであるが、このコンパイラ55の処理手順を図6を参照して以下に説明する。
図6のステップ201において、上記コンパイラ55は、処理を開始するとまずソースコード読み込み処理を実行する。このソースコード読み込み処理は、アプリケーションプログラム開発者が上記コンパイラ55に入力として与えたソースコードを先頭から読み込み、コンパイルする。
次に、ステップ203において、上記読み込んだ部分がライブラリ関数呼び出しの形式であるかどうかをライブラリ呼び出し判定処理で判定し、このライブラリ呼び出し判定処理の判定の結果、読み込んだ部分がライブラリ関数呼出処理でなかった場合は、一般コード生成処理を実行する(ステップ205)。この一般コード生成処理は、この実施例においては、ライブラリ関数呼出以外のC言語にしたがう記述を命令コードにコンパイルする処理である。
上記ステップ203において、読み込んだ部分がライブラリ関数呼出であった場合、次に、ステップ207において、バージョン番号読み込み処理が行われる。このバージョン番号読み込み処理は、次のライブラリ呼出命令生成処理(ステップ209)で必要とされる配布プログラム57中に書き込むバージョン番号を得るためのもので、図2に示すソースコードをソースコード読み込み処理(ステップ201)で読み込んで判別しているライブラリ関数名19を用いて、図5に示す様にそれと同じ名称の関数名フィールド75を有する関数ブロック77を実行系ライブラリ53のライブラリファイル79から読み込み、そのバージョンフィールド81を読み込むことによって、上記配布プログラム57の中に書き込むバージョン番号を得る様にしている。
【0016】
そして、次に、ステップ209において、ライブラリ呼出命令生成処理を実行する。このライブラリ呼出命令生成処理は、図2に示した例(ライブラリ関数名19がfであるライブラリ関数を呼び出す処理)を、図4に示す例にコンパイルし、配布プログラム57に命令コードを書き込む。
上記コンパイラ55は、ライブラリ関数名19をfとするライブラリ関数を呼び出す部分を図4に示すように、そのライブラリ関数名19に応じたライブラリ参照フィールド83および呼び出すライブラリ関数のバージョンを指定する関数バージョンフィールド73を持つライブラリを呼び出す命令71に変換している。
上記コンパイラ55は、ソースコード読み込み処理(ステップ201)で読み込み、一般コード生成処理(ステップ205)またはライブラリ呼出命令生成処理(ステップ209)で命令コードを生成し、読み込んだ部分が、入力しているソースコードの最後の部分であるかどうかを処理終了判定処理で判定し(ステップ211)、最後の部分でなかったならば再びステップ201のソースコード読み込み処理から処理を行い、最後の部分であったならば、上記配布プログラム57の生成を完了して、コンパイルの処理を終了する。
【0017】
次に、アプリケーションプログラム開発者がアプリケーションプログラムの開発を終了した後に、アプリケーションプログラム利用者が利用できるようにするには、コンパイル処理を行った後にできあがった配布プログラム57を実行系にインストールするわけであるが、このインストーラ59によるインストール処理について図7を参照して以下に説明する。
まず、図7のステップ213において、上記インストーラ59は、処理を開始すると、まず配布プログラム57の複写処理を実行する。この配布プログラムの複写処理は、上記配布プログラム57を実行系54が読み取って実行可能な場所および格納形式でプログラムファイル63に複写する。ここでは、単純に、配布プログラム57と全く同一の形式とする。
上記インストーラ59は、次に、ステップ215において、配布プログラム57が利用するライブラリ関数のバージョン番号を検出するバージョン番号の検出処理を実行する。すなわち、上記インストーラ59は配布プログラム57を読み取り、その中からライブラリ呼出命令71を識別し、その中のライブラリ参照フィールドを読み出して、呼び出すライブラリ関数名19を識別し、そのライブラリ関数名19と同一名称の関数名フィールド25を有する関数ブロック23をライブラリファイル21から読み出し、そのバージョンフィールド27を読み出して、利用するバージョン番号を検出する。
【0018】
次に、インストーラ2は、ステップ217において、利用可能バージョン番号の検出処理を行う。この利用可能バージョン番号の検出処理は、実施例における実行系ライブラリ67のライブラリファイル79の中から、バージョン番号を検出する対象としているライブラリ関数名19と同じ名称の関数名フィールド75を有する全ての関数ブロック77を読み取って、それらの中のバージョンフィールド81の全てを読み取る。
次に、ステップ219において、上記インストーラ59は、上記利用可能バージョン番号の検出処理で読み取った全てのバージョン番号の中に、利用するバージョン番号の検出処理で読み取ったバージョン番号があるかどうかを判定する利用可能判定処理を行う。その結果、利用するバージョン番号の検出処理で読み取ったバージョン番号が、利用可能バージョン番号の検出処理で読み取ったバージョン番号の中にない場合、ステップ221においてライブラリ複写処理を行う。このライブラリ複写処理(ステップ221)は、開発系ライブラリ53から読み取った関数ブロック23を実行系ライブラリ67のライブラリファイル79の中に無条件に追加する処理である。
ここで、上記実行系ライブラリ67の例を図5に示す。この実施形態においては、上記実行系ライブラリ67のライブラリファイル79の中に、バージョンフィールド81の内容が異なれば、関数名フィールド75の内容が同一の関数ブロック77が複数存在する。また、バージョンフィールド81の内容がともに等しく、かつ関数名フィールド75の内容がともに等しい。2つの関数ブロック77は存在しないように構成されている。
【0019】
次に、上記実行系54の動作処理について図8を参照して説明する。
上記実行系54を操作してアプリケーションプログラムを起動する利用者は、実行系54に対する入力として、インストーラ59が作成したプログラムファイル63を指定して、実行系54の処理を起動すると、起動した実行系54は、まずプログラムファイル63をメモリ上に読み込む、プログラムのロードを実行する(ステップ223)。
上記プログラムのロードが終わると、上記実行系54は、ロードしたプログラムファイル63の内容であった命令コードを解析して、実行すべき命令コードを特定する命令の解析処理を行う(ステップ225)。その結果、ステップ227において、実行すべき命令コードがライブラリ呼出命令であるかどうかをライブラリ呼出判定処理で判定し、ライブラリ呼出命令でなければ一般命令の実行を行う(ステップ229)。この一般命令の実行では、ライブラリ呼出命令以外の全ての命令コードの実行を行う。
上記ライブラリ呼出判定処理(ステップ227)でライブラリ呼出命令であると判定した場合は、ステップ231において上記命令の解析処理で識別した実行すべき命令コードの中から、呼び出すべきライブラリ関数のバージョン番号を検出するバージョン番号検出処理をライブラリのロードの直前に行う。ここで、この実施形態におけるプログラムファイル63の形式は、図4に示す配布プログラムと同一の形式であり、その中の、ライブラリ呼出命令71は、そのライブラリ関数バージョンフィールド73に、呼び出すべきバージョンを保持している。上記バージョン番号検出処理では、呼び出すべきライブラリ関数のバージョン番号の検出を、このライブラリ関数バージョンフィールド73を読むことで行う。
【0020】
次に、ステップ233におけるライブラリのロードでは、上記実行系ライブラリ67のライブラリファイル79の中から、呼び出すべきライブラリ関数名と同じ名称を有する関数名フィールド75を有し、かつ上記バージョン検索処理で検出したバージョン番号と同じ番号を有するバージョンフィールドを有する関数ブロック77のコードエリア85を読み出し、メモリ上にロードする。次に、上記ライブラリのロードを終えると、上記実行系54は、上記ライブラリのロードの場合ではコードエリア85からメモリ上にロードした命令コードの列、もしくは既にメモリ上に存在していた場合には、コードエリア18からメモリ上にロードしたときに相当する命令コードの列を実行するライブラリの実行を行う(ステップ235)。一般命令の実行もしくはライブラリの実行を行った実行系54は、次に、ステップ237において、その結果処理が終了するかどうかを判定する実行終了判定処理を行い、終了しないと判定したならば引き続く命令コードを識別して上記命令の解析(ステップ225)からの処理を再び行う。終了すると判定したならば、実行系54は処理を終了する。尚、バージョンアップを例に挙げ一連の説明を行なったが、本発明はバージョンアップだけに限定されるものではなく、バージョンアップまたはバージョンダウンなどにより、開発系コンピュータと実行系コンピュータ間でのライブラリ関数のバージョンを一致させるものであることは言うまでも無い。
【0021】
【発明の効果】
本発明は、以上説明した様に、配布プログラムにライブラリ関数のバージョン番号を付けて実行系へ配布し、インストール時に古いバージョンのライブラリ関数に追記して新しいバージョンのライブラリ関数を実行系ライブラリに書き込む様にしたので、アプリケーションプログラム開発で用いたライブラリ関数と同一のライブラリ関数を全て実行系に保持することが可能となり、アプリケーションプログラムの動作検証を行ったときと同一の条件で常にアプリケーションプログラムを動作させることが可能となる。
【図面の簡単な説明】
【図1】本発明によるライブラリ関数のバージョンアップ方法の一実施形態の手順を示す図である。
【図2】図1に示したプログラムソースを示す図である。
【図3】図1に示した開発系ライブラリの内部構造を示す図である。
【図4】図1に示した配布プログラムを示す図である。
【図5】図1に示した実行系ライブラリを示す図である。
【図6】図1に示したコンパイラの処理手順を示すフローチャートである。
【図7】図1に示したインストーラの処理手順を示すフローチャートである。
【図8】図1に示した実行系の処理手順を示すフローチャートである。
【図9】従来のライブラリ関数のバージョンアップ方式の手順を示す図である。
【図10】図9に示したプログラムソースを示す図である。
【図11】図9に示した開発系ライブラリの内部構造を示す図である。
【図12】図9に示した配布プログラムを示す図である。
【図13】図9に示した実行系ライブラリを示す図である。
【図14】図9に示したコンパイラの処理手順を示すフローチャートである。
【図15】図9に示したインストーラの処理手順を示すフローチャートである。
【図16】図9に示した実行系の処理手順を示すフローチャートである。
【符号の説明】
1…ソースコード、 2…開発系、
3…開発系ライブラリ、 4…実行系、
5…コンパイラ、 7…配布プログラム、
9…インストーラ、 13…プログラムファイル、
15…OS、 17…実行系ライブラリ、
19…ライブラリ関数名、 21…ライブラリファイル、
23…関数ブロック、 25…関数名フィールド、
27…バージョンフィールド、 29…ライブラリ参照フィールド、
31…ライブラリ呼出命令、 33…ライブラリファイル、
35…関数名フィールド、 37…関数ブロック、
39…バージョンフィールド、 41…コードエリア、
51…ソースコード、 52…開発系、
53…開発系ライブラリ、 54…実行系、
55…コンパイラ、 57…配布プログラム、
59…インストーラ、 63…実行系ライブラリ、
65…OS、 67…実行系ライブラリ、
71…ライブラリ呼出命令、
73…ライブラリ関数バージョンフィールド、
75…関数名フィールド、 77…関数ブロック、
79…ライブラリファイル、 81…バージョンフィールド、
83…ライブラリ関数参照フィールド、 85…コードエリア、
101〜237…各ステップ
Claims (2)
- 開発系コンピュータで開発された配布プログラムと前記配布プログラムを実行系コンピュータで実行する際に利用するライブラリ関数であって開発時に使用したものとを記録しているインストーラを、実行系コンピュータへ供給し、前記実行系コンピュータの操作者が前記配布プログラムの前記インストーラを起動し、前記実行系コンピュータへインストールする際に、上記実行系コンピュータのライブラリに保持されているライブラリ関数を上記配布プログラムで使われるライブラリ関数のバージョンに一致させるライブラリ関数バージョン一致方法であって、前記開発系コンピュータにて前記配布プログラムに使用するライブラリ関数のバージョンを前記配布プログラム内に記述しておき、前記実行系コンピュータへ前記配布プログラムをインストールする際に、前記インストーラが前記配布プログラムに使用するライブラリ関数とそのバージョンを検出し、当該ライブラリ関数に対応する前記実行系コンピュータのライブラリに保持されているライブラリ関数とそのバージョンを検出し、ライブラリ関数とバージョンが一致したときは、前記実行系コンピュータのライブラリへ前記配布プログラムにおいて使用されるバージョンのライブラリ関数の追記は行わず、ライブラリ関数のバージョンが一致するものが存在しないときのみ、前記実行系コンピュータのライブラリをそのまま保持し、前記実行系コンピュータのライブラリへ前記配布プログラムにおいて使用されるバージョンのライブラリ関数を前記インストーラから追記する様にしたことを特徴とするライブラリ関数バージョン一致方法。
- 請求項1に記載の前記配布プログラムのライブラリ呼出命令コードに、当該ライブラリ関数と、そのバージョンを示す符号とが記述されていることを特徴とするライブラリ関数バージョン一致方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP19098899A JP4484001B2 (ja) | 1999-07-05 | 1999-07-05 | ライブラリ関数バージョン一致方法。 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP19098899A JP4484001B2 (ja) | 1999-07-05 | 1999-07-05 | ライブラリ関数バージョン一致方法。 |
Publications (2)
Publication Number | Publication Date |
---|---|
JP2001022560A JP2001022560A (ja) | 2001-01-26 |
JP4484001B2 true JP4484001B2 (ja) | 2010-06-16 |
Family
ID=16267004
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP19098899A Expired - Fee Related JP4484001B2 (ja) | 1999-07-05 | 1999-07-05 | ライブラリ関数バージョン一致方法。 |
Country Status (1)
Country | Link |
---|---|
JP (1) | JP4484001B2 (ja) |
Families Citing this family (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20050177826A1 (en) * | 2004-02-05 | 2005-08-11 | Miller James S. | Versioning support in object-oriented programming languages and tools |
JP2009245194A (ja) * | 2008-03-31 | 2009-10-22 | Fuji Electric Systems Co Ltd | プログラマブルコントローラ、プログラマブルコントローラ支援装置、及びプログラマブルコントローラシステム |
JP5353747B2 (ja) * | 2010-02-16 | 2013-11-27 | 三菱電機株式会社 | 制御プログラム作成装置 |
CN110968342B (zh) * | 2019-11-29 | 2023-07-21 | 中国银行股份有限公司 | 一种版本比对方法、装置及系统 |
-
1999
- 1999-07-05 JP JP19098899A patent/JP4484001B2/ja not_active Expired - Fee Related
Also Published As
Publication number | Publication date |
---|---|
JP2001022560A (ja) | 2001-01-26 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US5835701A (en) | Method and apparatus for modifying relocatable object code files and monitoring programs | |
JP5007046B2 (ja) | コンポーネントベースのソフトウェア・プロダクトの保守 | |
JP4828271B2 (ja) | 複数osバージョン用ソフトウェア生成装置及び複数osバージョン用ソフトウェア生成支援プログラム | |
KR101247062B1 (ko) | 제한적인 호출 규칙을 갖춘 코드의 검사 방법 | |
US8266692B2 (en) | Malware automated removal system and method | |
US6131192A (en) | Software installation | |
CN111562934B (zh) | 一种基于热补丁的软件系统升级方法、终端及存储介质 | |
JP2000181725A (ja) | 実行可能なコ―ドを改変し、追加機能を付与するための方法およびシステム | |
EP0962859A2 (en) | Global register systems, methods, and computer program products | |
US20020032901A1 (en) | Unitary data structure systems, methods, and computer program products, for global conflict determination | |
JP4484001B2 (ja) | ライブラリ関数バージョン一致方法。 | |
CN100472987C (zh) | 通信系统程序故障检测方法 | |
GB2342200A (en) | Initializing global registers | |
JPH11134178A (ja) | ロードモジュールの版数情報による相互関連チェック方式およびプログラム記録媒体 | |
JPH11272451A (ja) | ソフトウェアのインストール制御システムと方法およびそのプログラムを記録した記録媒体 | |
JPH10293683A (ja) | プログラムの比較解析装置、プログラムの比較解析方法、及びプログラムの比較解析プログラムを記録した機械読み取り可能な記録媒体 | |
JPH0887416A (ja) | 制御プログラム作成装置 | |
JP2011243072A (ja) | ソフトウェア有効期限変更方法及び装置 | |
JP3309792B2 (ja) | スタックポインタトレース装置、スタックポインタトレース方法及び記録媒体 | |
JPH08147155A (ja) | オブジェクトプログラムの命令の変更/挿入方法及びシステム | |
WO2012066635A1 (ja) | テスト方法、テスト装置及びテスト実行用プログラム | |
JP2022154258A (ja) | 不正箇所特定プログラム、不正箇所特定装置、及び不正箇所特定方法 | |
JP2000330780A (ja) | ソフトウェアのパッチデータ自動生成装置 | |
JP2021117653A (ja) | 検査システム、検査方法及び検査プログラム | |
Axnix et al. | Open-standard development environment for IBM System z9 host firmware |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A621 | Written request for application examination |
Free format text: JAPANESE INTERMEDIATE CODE: A621 Effective date: 20060301 |
|
A711 | Notification of change in applicant |
Free format text: JAPANESE INTERMEDIATE CODE: A711 Effective date: 20070905 |
|
A977 | Report on retrieval |
Free format text: JAPANESE INTERMEDIATE CODE: A971007 Effective date: 20081105 |
|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20090331 |
|
A521 | Written amendment |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20090601 |
|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20090728 |
|
A521 | Written amendment |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20090925 |
|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20091201 |
|
A521 | Written amendment |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20100105 |
|
TRDD | Decision of grant or rejection written | ||
A01 | Written decision to grant a patent or to grant a registration (utility model) |
Free format text: JAPANESE INTERMEDIATE CODE: A01 Effective date: 20100309 |
|
A01 | Written decision to grant a patent or to grant a registration (utility model) |
Free format text: JAPANESE INTERMEDIATE CODE: A01 |
|
RD02 | Notification of acceptance of power of attorney |
Free format text: JAPANESE INTERMEDIATE CODE: A7422 Effective date: 20100316 |
|
A61 | First payment of annual fees (during grant procedure) |
Free format text: JAPANESE INTERMEDIATE CODE: A61 Effective date: 20100316 |
|
R150 | Certificate of patent or registration of utility model |
Free format text: JAPANESE INTERMEDIATE CODE: R150 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20130402 Year of fee payment: 3 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20130402 Year of fee payment: 3 |
|
S531 | Written request for registration of change of domicile |
Free format text: JAPANESE INTERMEDIATE CODE: R313531 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20130402 Year of fee payment: 3 |
|
R350 | Written notification of registration of transfer |
Free format text: JAPANESE INTERMEDIATE CODE: R350 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20130402 Year of fee payment: 3 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20130402 Year of fee payment: 3 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20140402 Year of fee payment: 4 |
|
R250 | Receipt of annual fees |
Free format text: JAPANESE INTERMEDIATE CODE: R250 |
|
LAPS | Cancellation because of no payment of annual fees |