2012-05-11 23 views
0

私はMicrosoft Visual C++ 10でプログラムをコンパイルしており、PDCursesライブラリを使用しています。私はそれをpdcurses.libとリンクするように設定しましたが、アプリケーションを実行しようとすると、システムは "pdcurses.dll"を見つけることができないと文句を言います。それについてそれに不平を言うべきではありません。私はMinGW(GCC)でプログラムをコンパイルしていましたが、アプリケーションを実行しようとするとDLLについて私に尋ねません。 MSVCがPDCursesを静的にリンクするように私は何をすることができますか?MSVCでライブラリを静的にリンクする方法は?

+8

pdcurses.libは実際にはスタンドアロンのスタティックライブラリではなく、DLLのインポートライブラリです。 DLLを必要としないスタンドアロンの静的ライブラリがあることを確認する必要があります。 –

答えて

3

MSVCで.libファイルには2つの形式をとることができます。

  1. 静的ライブラリ
  2. 前者はからエクスポートされたエントリポイントのアプリケーションに認識させるために使用することができます

インポートライブラリDLLは、PEファイルのインポートディレクトリ(または遅延ロードされたインポートのための別の同様の場所)に書き込まれます。

ただし、実際には、参照される関数ごとに含まれるコードを最終的なバイナリにリンクします。これは必要なものですが、リンクしたいライブラリのリリースで提供されていない場合は、ソースコードから静的ライブラリを構築する必要があります。

しかし、別の可能性があります:単に.libファイルを見つけるためにリンカーの間違ったディレクトリを渡すことができます。この場合、静的ライブラリの代わりにインポートライブラリをリンクします。ビルドログで使用するパスを確認してください。ただし、これは、ライブラリの配布に両方のタイプのライブラリが含まれている場合にのみ適用されます。

+0

私は同じディレクトリにpdcurses.libとpdcurses.dllの両方を持っています。私は、そのディレクトリに "追加のライブラリ"パスを設定しているので、.libを見つけるはずです。そして "input"フィールドにはpdcurses.libが追加されています。私は静的にGCCを使って他のアプリケーションにpdcursesをリンクさせていました。問題はいくつかのMSVC設定にありますが、正確には何かを知ることはできません。 –

+0

あなたが 'lib.'を持っているからといって、' .lib'のタイプについて何も言わないだけです。見つけやすい簡単な経験的な方法は、DLLが '.lib 'よりも小さいか大きいかです。もしそれが大きければ、 '.lib 'は単なるインポートライブラリである可能性があります。もしそれが小さければ、 '.lib'はあなたが探している静的ライブラリでしょう。あなたのビルドログからの詳細をあなたの質問に含めると、私たちはさらに助けることができます。これはアーカイブ( '.a')または' .so'を直接使用するため、GCCは比較としては意味がありません。 MSVCでは、ダイナミックリンクにインポートライブラリ( '.lib')が必要です。 – 0xC0000022L

-4

dllはパス内にある必要があります。

+1

これは静的リンクとはまったく関係ありません。 –

+0

PDCursesを使用する場合は、パスにdllを入れる必要があります。その後、あなたはインターフェイスライブラリにリンクすることができます。 – EvilTeach

関連する問題