- ベストアンサー
リンカのコマンドライン
こんにちは。 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) と以上のようになっております。 コーディングミスは参考書を散々読み直したので、間違いないと思っております。 ただ、参考書が間違っていたら、取り付く島もありません。 どうぞ、お願いいたします。
- みんなの回答 (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に含まれている関数を利用するためのもので,コンパイルしてもファイル(実体)にはなりません(実体は別な場所に格納されているので)。
その他の回答 (2)
- YoxoY
- ベストアンサー率42% (43/101)
そのライブラリがマイクロソフト用である可能性が高いと思います。 そのpro.libをcoff2omf.exeにかけるか、pro.dllにimplib.exeを用いてみて下さい。 ボーランドとマイクロソフトとではファイル内部のフォーマットが異なるのです。
お礼
お返事ありがとうございました。 せっかくご教授いただいたのですが、他の方の回答で解決致しました。 しかしながら、色々な場面を想定できたので、とても勉強になりました。 ありがとうございます。
- tsukasa-12r
- ベストアンサー率65% (358/549)
pro.lib は main.obj、make.obj と同じフォルダにあるんでしょうか?別のフォルダにあるのなら、 bcc32 -LC:\AAA\BBB main.obj ... のように pro.lib のパスを指定するか bcc32 ... C:\AAA\BBB\pro.lib のようにフルパスで pro.lib を指定しないとダメです。
補足
ご回答ありがとうございます。 全ファイル同じフォルダに入っているのですが、 このやり方も試してみます。 ありがとうございました。
お礼
ありがとうございます。 返事が遅くなって申し訳ございません。 答えはNOです。 RJCOさんのおっしゃる通り、pro.libをコマンドラインから外すと実現できました。 本当に助かりました。