2009-08-16 17 views
1

Cの初心者は、Cソースファイルの先頭に#include "something.h"と宣言するだけで、プログラムが魔法のように外部ライブラリにアクセスできるようです。どうしたの?Cプログラムでの外部ライブラリの使用

私はPOSIXライブラリ(unistd.h)を使いたいです。私はヘッダーファイルといくつかのDLLを持っていますが、それらをリンクしてコンパイル(GCC MinGW)してDLLを見つけることはできません。

dllを生成してリンクする方法とdllをCヘッダーに接続する方法についての良いチュートリアルは何ですか?

答えて

2

あなたの前提に間違いがあります。ヘッダーファイルはDLLへの魔法のアクセスを与えません。ヘッダーファイルはライブラリではなく、ヘッダーを持つだけで宣言する関数を呼び出すことはできません。いずれの場合でも、MinGWにはunistd.hが付属しています。通常のWindows環境ではすべてのPOSIX機能が利用できるわけではありませんが、余分なヘッダーやDLLは必要ありません。 WindowsでPOSIX環境を使用する場合は、MinGWではなくCygwinを使用してください。

1

.hファイルは、コンパイル時にどのエントリポイントが利用可能になるかをプログラムに知らせるためにのみ使用されます。

コンパイルのドキュメントを参照して、リンク.dllの指定方法を確認することをお勧めします。

インポートする.dllを指定するために、-lのようなフラグの検索を開始する可能性があります。

0

Cはちょうどこのようにひどいです。適切なDLLを正しい.hファイルに接続することは、プログラマまではすべてです。プログラミング/ファイルシステムの慣習がたくさんありますが、間違ってしまうのは簡単ですし、初心者が習得するのは難しいです。

私はshort handout on compiling and linking with Unix librariesと書いていましたが、 Windows上での詳細は同じではありませんが、概念が有用であることを願っています。

+0

ショック!ホラー!プログラマは彼らが何をしているのかを知る必要があります!どのようなばかげたアイデア!もちろんMinGWは、CランタイムDLLがlinkeを取得するように手配します。他のCコンパイルシステムと同様です。もちろん、非標準機能を使用する場合は、非標準ライブラリをリンクする必要があります。 –

+0

@Neil:そうです。私はいくつかの人々がlibcだけを使ってプログラムを書くことを忘れています。もちろん、glibcは膨大な膨れた豚ですから、これはかつてこれがより合理的な命題でした。 –

1

NeilとNormanの答えは技術的には正解ですが、MSVCのような一部のコンパイラは、純粋な#includeが正しいライブラリに魔法のようにリンクすることを実際に許可しています。

の#pragmaコメント(libに、 "library.lib")

または

#:これは、このようになります含ま.hファイル内の特殊なディレクティブを使用して達成されます

コンパイラは、生成されたオブジェクトファイル(.oまたは.obj)とlにプラグインを埋め込みます(リンカ、 "/DELAYLOAD:library.dll")。それを抽出してオプションに追加します。

関連する問題