プロが教える店舗&オフィスのセキュリティ対策術

こんにちは。
C言語の勉強をしているのですが、リンカができなくて困っています。

環境:
OS:windows2000
コンパイラ:Borland C++ 5.5
(他に必要な環境があれば、ご教授ください)

まず、main()関数と作成した関数をコンパイルします。
Borland C++ 5.5のヘルプを参照して、
「bcc32 main.obj make.obj pro.lib」
これでリンクしようとしたのですが、
「ファイル pro.libが開けません」
とプロンプトに出力されます。

(main()関数→main.obj
作成した関数→make.obj
関数プロトタイプ宣言するファイル→pro.lib)
 保存は(main.obj→main.cpp、make.obj→make.cpp、pro.lib→pro.h)

と以上のようになっております。

コーディングミスは参考書を散々読み直したので、間違いないと思っております。

ただ、参考書が間違っていたら、取り付く島もありません。

どうぞ、お願いいたします。

A 回答 (3件)

質問に質問を返して申し訳ないのですが,pro.libというファイルは既に存在しますか?



→Yesの場合
pro.libがコンパイル&アーカイブ済みのライブラリで,main.cppかmake.cppでpro.libに含まれる(exportされている)関数を使っているケースでは,質問文の通り,pro.libをリンクする必要があります。
カレントフォルダにpro.libが存在するのに,リンカがそれを開けないということは考えずらいのですが,pro.libが正しいライブラリファイルでない可能性があります。(リンカはフォルダ指定の無い.libファイルを指定されると,まずカレントフォルダを探し,見付からない場合には環境変数やコマンドラインで指定されたライブラリパスを探しに行きます)

→Noの場合
コマンドラインからpro.libを取り除くとうまくいきませんか?
pro.hにプロトタイプ宣言した関数が,main.cppかmake.cppに実装された関数,および“C/C++で黙って使える関数”(暗黙のライブラリの関数)だけである場合,.libファイルを明示的にリンクする必要はありません。
質問の解釈が間違っていたらごめんなさい。もしもtororinnさんが,pro.hというヘッダを書いたら,pro.libというライブラリができると思われているのであれば,それは間違いです。この場合のプロトタイプ宣言は,“どこかの”.objや.libに含まれている関数を利用するためのもので,コンパイルしてもファイル(実体)にはなりません(実体は別な場所に格納されているので)。
    • good
    • 0
この回答へのお礼

ありがとうございます。
返事が遅くなって申し訳ございません。

答えはNOです。
RJCOさんのおっしゃる通り、pro.libをコマンドラインから外すと実現できました。

本当に助かりました。

お礼日時:2004/04/07 09:11

そのライブラリがマイクロソフト用である可能性が高いと思います。


そのpro.libをcoff2omf.exeにかけるか、pro.dllにimplib.exeを用いてみて下さい。

ボーランドとマイクロソフトとではファイル内部のフォーマットが異なるのです。

参考URL:http://www.borland.co.jp/cppbuilder/freecompiler …
    • good
    • 0
この回答へのお礼

お返事ありがとうございました。

せっかくご教授いただいたのですが、他の方の回答で解決致しました。

しかしながら、色々な場面を想定できたので、とても勉強になりました。
ありがとうございます。

お礼日時:2004/04/07 09:21

pro.lib は main.obj、make.obj と同じフォルダにあるんでしょうか?別のフォルダにあるのなら、


bcc32 -LC:\AAA\BBB main.obj ...
のように pro.lib のパスを指定するか
bcc32 ... C:\AAA\BBB\pro.lib
のようにフルパスで pro.lib を指定しないとダメです。

この回答への補足

ご回答ありがとうございます。
全ファイル同じフォルダに入っているのですが、
このやり方も試してみます。
ありがとうございました。

補足日時:2004/04/05 09:19
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!