Cygwin: dllを作る・使う

http://www.nslabs.jp/cygwin-dll.rhtml

foo.c

「__declspec(dllexport)」は不要…と。

#include <stdio.h>

void foo() {
  puts("foo()");
}

「-fPIC」は不要…と。


~/work$ gcc -c foo.c
~/work$ gcc -shared foo.o -o foo.dll

暗黙的リンク

void foo();

int main() {
  foo();
  return 0;
}

インポートライブラリは不要…と。


~/work$ gcc bar.c -L. -lfoo -o bar*1
~/work$ ./bar
foo()

暗黙的リンク

void foo();

int main() {
  foo();
  return 0;
}

明示的リンク

VCと比較するとわかりやすい。

#include <dlfcn.h>

int main() {
  void (*f)();

  void *h = dlopen("foo.dll", RTLD_LAZY);
  f  = (void (*)()) dlsym(h, "foo");
  f();
  dlclose(f);

  return 0;
}


~/work$ gcc bar.c -o bar
~/work$ ./bar
foo()

*1:gcc bar.c foo.dll -o bar」でも大丈夫だった