• ベストアンサー

BCCでコンパイルする際に静的リンク指定が無視される

GLUTを使用したCプログラムをBCCでコンパイルしたのですが、実行ファイルが生成されてもライブラリが静的リンクされません。 コンパイルオプションとして、 > bcc32 *.c glut32.lib glu32.lib winmm.lib とlibファイル名のリストを与えているのですが…… 当然ながら、bcc32.cfgとilink32.cfgの環境変数でlibファイルへのパスは与えてあります。

質問者が選んだベストアンサー

  • ベストアンサー
  • xcrOSgS2wY
  • ベストアンサー率50% (1006/1985)
回答No.2

bcc32のコマンドラインでライブラリファイルの指定を行うことには全く問題ありません。 ただし、質問の例で指定されている   glut32.lib   glu32.lib   winmm.lib はいずれも、   glut32.dll   glu32.dll   winmm.dll への動的リンクを作成するためのインポートライブラリのようです。インポートライブラリを指定すると、生成されたEXEはDLLを要求します。 静的リンクを行うのであれば、インポートライブラリではなくオブジェクトライブラリを指定する必要があります。

etendard
質問者

お礼

御回答ありがとうございます。 ライブラリの同梱はできていたものの、 ライブラリファイルそのものが静的リンク対象として不適だったのですね。 今回の件は勉強になりました。どうもありがとうございました。

その他の回答 (1)

  • rinkun
  • ベストアンサー率44% (706/1571)
回答No.1

> bcc32 *.c glut32.lib glu32.lib winmm.lib 普通、こんなざっぱなコンパイルはしないと思うけど。 ちゃんとmakeを書いて各オブジェクトファイルをコンパイルしてからリンクさせる方が見易いと思う。 BCCはしらないけど、とりあえず静的リンクしたいなら静的リンクのオプションがあるはず。bcc32のオプションになくてもリンカ(ilink32)の方にあるはずだからbcc32でilink32にオプションを受け渡す方法とともにマニュアルで確認して設定すること。

etendard
質問者

お礼

御回答ありがとうございます。 御指摘の件ですが、ilink32ではリンク実行時にコマンド引数として 同梱するライブラリのファイル名を記述することで 静的リンクできるとマニュアルには記載されていました。 ところが、このようにして実行ファイルを生成しても、 リリース先の環境でDLLを求められてしまい、静的リンクができていません。 makefileを作成しても同じ結果となりました。 さらにwebで検索したところ、bcc32を実行する時点で ライブラリをコマンド引数として与えても静的リンクできた という報告まであり、すっかり訳が分からなくなってしまった次第です。

関連するQ&A