Visual C++ のライブラリを lcc-win32 で使う方法

観測気球

収集物の記録書庫 a data archive of collection -- collectible toys

[要旨] 世の中には VC++ 用のライブラリが大量に存在していますので、これらを lcc でも利用できるとうれしいですよね。今回は、VC++ 用のライブラリを lcc で使うためのノウハウを伝授します。
[キーワード] C コンパイラ,VC++,lcc

« 「ふしぎ星の☆ふたご姫」 お楽しみ袋(BlogPet) | トップページ | W-ZERO3 »

2005.12.09

Visual C++ のライブラリを lcc-win32 で使う方法

2年前に書いたメモを元に、記事を書きます。


lcc-win32 というのは、Windows 用の C コンパイラで、非商用で使う場合は無料です(商用で使う場合はライセンスを購入する必要があります)。lcc は、あくまでも C コンパイラであって、C++ コンパイラではありません。「C++ までは要らない。C で十分だ」って人にお奨めします。lcc には wedit という統合開発環境もあるんですが、私はコマンドラインで使っています。ANSI C 準拠ですが、Win32 環境向けに多少拡張されています。リソースエディタも付いているので、そこそこ凝ったプログラムも作れます(が、Visual Studio + Visual C++ のように簡単に作成できる訳ではありません)。

lcc は処理系が小さくて、そこそこ良いコードを生成するので、結構重宝します。Visual Studio をインストールするのに必要なハードディスクの容量の数パーセントしか消費しません。

ちょっとしたプログラムを書く分には lcc だけで十分なんですが、ちょっと本格的なプログラムを書くときとか、すでに世の中に存在するライブラリを使いたくなる状況が発生することがあります。で、たいていの場合、Win32 環境向けのライブラリは Visual C++ 向けだったりします。世の中にたくさん存在する VC++ のライブラリを lcc でも使えたらいいのに、という話になります。

スタティックライブラリにしても DLL にしても、.lib ファイルさえ公開されていれば、lcc から利用可能です。とはいっても、VC++ の生成する .lib と lcc の期待する .lib の形式が違うため、VC++ の .lib ファイルをどうにかして lcc の .lib ファイルに変換してやる必要があります。

で、ググってみると、以下のような Web ページにたどり着きます。

【lcc-Win32】
さて。次にlccだが。.libの形式がVCと違うから、まず.libを作らねば。と:
  dumpbin /linkermember GLUT32.lib > g.txt
#dumpbin.exeはVC++付属のツールです
これで関数宣言(と、余計なものまで)がg.txtに落ちるから、それをglut32.exp
という名前のファイルにする。その内容はテキストファイルで:
        GLUT32.DLL
        _glutAddMenuEntry@8
        _glutAddSubMenu@8
        ...
こんな感じ。

(略)

結局:
        buildlib glut32.exp glut32.lib
 してできたglut32.libを(lccの)libフォルダにコピー。これでOK。

(略)

#buildlib.exeはlcc付属のツールだよ。消してないよね?

GLUTで3次元

上記の説明で glut32 という部分を「自分が利用しようとしているライブラリの名前」に読み替えれば、この方法を一般化できます。

ということなんですが、手元に VC++ 用の「モジュール定義ファイル」(拡張子は .def)があれば、それを元に .exp (エクスポートファイル)をテキストエディタ等で作ることも可能です。こっちの方がわかりやすい(編集しやすい)かな。ちなみに、VC++ の生成する .exp ファイルは(拡張子が同じというだけで中身は全然別物なので)使えません。

…… などと書いてきましたが、実は、もっと簡単な方法があります。

VC++ の .lib を元に lcc の .lib を得る方法

以下、 VC++ で作ったDLL を bbb.dll、そのlink情報ファイルを bbb.lib とします。 そして、lcc でコンパイルしたオブジェクトを aaa.obj とし、最終的に aaa.obj と bbb.lib をリンクして aaa.exe を得るのを目的とします。

(1) VC++ の .lib ファイルをそのまま使う方法、すなわち

        lcclnk -o aaa.exe aaa.obj bbb.lib

では、リンクに失敗します(entry point が見つからないというエラーになります)。

(2) 以下のようにして、VC++ の .lib から lcc の .lib に変換することで、上記のコマンドラインによるリンクが通るようになります。

        pedump /exp bbb.lib > bbb.exp
        mv bbb.lib __bbb.lib
        buildlib bbb.exp bbb.lib
(上記では、念のために、オリジナルの bbb.lib をいったん __bbb.lib にリネームして退避させています)

なお、pedump も buildlib も lcc-win32 付属のコマンドです(lcc\bin の下にあります)。

ということで、上記の方法を使えば、VC++ 用のライブラリが lcc でも使えるようになります。

投稿者: tsupo 2005.12.09 午前 12:30 | 固定リンク | このエントリーをはてなブックマークに追加 | このエントリを del.icio.us に登録 このエントリの del.icio.us での登録状況 | このエントリを Buzzurl に追加このエントリの Buzzurl での登録状況 | このエントリをlivedoorクリップに登録 このエントリのlivedoorクリップでの登録状況 このエントリをlivedoorクリップに登録している人の数 | 酢鶏巡回中

楽天市場


プログラミング」カテゴリ内の最近の記事

品揃え豊富で安い!NTT-X Store


アマゾンわくわく探検隊

トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/6737/7533730

この記事へのトラックバック一覧です: Visual C++ のライブラリを lcc-win32 で使う方法:

コメント


LCC-Win32ですが、上記のリンク先にはサイトが存在しません。いま現在、

LCCをベースにカスタマイズを加えたLCC-Win32、有料、日本円で8000円以上
http://www.q-software-solutions.de/products/lcc-win32/

本来のLCCであるPellesC、無料
http://www.smorgasbordet.com/pellesc/

このどちらかしかなく、ネタを再検証する必要があると思います。
PureBasicではLCC-Win32を推薦ライブラリ向けコンパイラとしてますが、
フォーラムを見ていると有料の方は使いにくい、PellesCを推奨するとあり
ました。PellesCであればこれまでのLCC-Win32と同じように使えるそう
です。

投稿者: おりゃ (2006.01.01 午前 05:06)


いま見に行ったら、確かに 404 Document Not Found になりますね。少なくともこの記事を書いた時点ではまだ lcc-win32 のサイトはあったので、12月中旬以降に何かがあったんでしょうね。

とりあえず、いま使っている lcc-win32 で特に困ったことはないので、そのまま使い続けます。

貴重な情報、ありがとうございました。

投稿者: tsupo (2006.01.03 午後 06:35)


at 2011.7
引用されてるWebページの作者です(^^;;
こ、この引用はもしかして?とか思ったらビンゴってたようでびっくりしましたです(自分のサイトを久しぶりに見てみたら同じ文章が書いてあったんで)。
VC++ to LCCへのlib変換方法のより簡易版、紹介ありがとう
ございます。参考にさせていただきます。(m_0_m)

ちょっと元気出ました。
ではでは。

投稿者: null (2011.07.28 午後 08:08)

コメントを書く




※イタズラ防止のため、メールアドレスを入力しないと投稿できません。

次からのコメント入力の手間を省くために、名前やメールアドレスをcookieに記憶しますか?


URL を入力すると、その URL にリンクがはられます。
なお、メールアドレスは公開されません。ご安心ください。


ワード

ニッセン

fujisan.co.jp

楽天市場