昨日までのブログに続いて最後にWindowsで動的なライブラリを作成する方法を書きます。
Mac OSXでダイナミックライブラリdylibを作ったり使ったりする方法。
Linuxで共有ライブラリsoを作ったり使ったりする方法。
Windowsの場合はダイナミックリンクライブラリdll
Windowsの場合は、dllという拡張子になります。これは色々なところで見かけるので、開発者でなくても知っていたりしますね。
下記ブログを参考にしました。
Windowsでgcc+SDL -ダイナミックリンクライブラリ作る(DLL)-
ライブラリのコードを書く。
簡単なライブラリコードを書きます。hello関数を実行すると、hello worldを出力するだけです。
#include
int hello() {
printf("hello world\n");
return 0;
}
これを、dylibexample.cと名づけて保存します。
Cygwin上でgccでdllにコンパイルする。
Windowsの場合は、コンパイルする環境を用意するだけでもちょっと面倒です。今回はCygwinを利用することにします。
$ gcc -c dylibexample.c
$ ls
dylibexample.c dylibexample.o
コンパイルしたものを、-sharedオプションをつけてdllに変換します。
$ gcc -shared -o dylibexample.dll dylibexample.o $ ls dylibexample.c dylibexample.dll dylibexample.o
main関数からライブラリを使う。
今度はライブラリを使う側の本体の処理を書きます。メイン関数の中に、ライブラリのhello関数を呼ぶ処理を書くだけとします。
int main(){
return hello();
}
これをコンパイルするときに、ダイナミックリンクライブラリdylibexample.dllをリンクします。
$ gcc -I./ -L./ -o main.exe main.c -ldylibexample
$ ls
dylibexample.c dylibexample.dll dylibexample.o main.c main.exe
実行ファイルができました!
$ ./main.exe
hello world
Cygwin上で実行できます!
Cygwinから独立して実行できるようにする。
こうして作成したexeをCygwinからではなく、Windowsのコマンドプロンプトから実行すると、エラーが出てしまいます。
Cygwinのgccでコンパイルすると、cygwin1.dllに依存する形になってしまうんですね。
この問題は、MinGWをコンパイラとして利用することで解決できます。
$ i686-w64-mingw32-gcc -c dylibexample.c
$ i686-w64-mingw32-gcc -shared -o dylibexample.dll dylibexample.o
$ i686-w64-mingw32-gcc -I./ -L./ -o main.exe main.c -ldylibexample
こうして作成されたexeはCygwinから離れてコマンドプロンプトからも実行できます!
各プラットフォームの動的ライブラリを作るシリーズ
Mac OSXの場合: Mac OSXでダイナミックライブラリdylibを作ったり使ったりする方法。
Linuxの場合: Linuxで共有ライブラリsoを作ったり使ったりする方法。
Visual Studioの場合: Visual Studioでダイナミックリンクライブラリdllを作ったり使ったりする方法。
コメント
[…] Windowsでダイナミックリンクライブラリdllを作ったり使ったりする方法。 […]
[…] Previous: Windowsでダイナミックリンクライブラリdllを作ったり使ったりする方法。 Next: Linuxで共有ライブラリsoを作ったり使ったりする方法。 […]
[…] 4回目のブログですが、「Windowsでダイナミックリンクライブラリdllを作ったり使ったりする方法。」に続いて、CygwinではなくVisual Studioを使ってdllを作成する方法を書きます。 […]
[…] […]
[…] り使ったりする方法 ▼ http://blog.katty.in/4350 […]