Memo: 2010年3月アーカイブ

何となく最近プログラミングしたい。
とりあえず、MacOSで何か作ろうと思っていろいろ調査したりしている。

dlopen()で、Dynamic Libraryを使う方法。
モジュール用にこんなん書いてみる。hoi.cとして保存。


#include

void hoi(void)
{
  printf("hoi!\n");
}


呼び出し側としてこんなん書いてみる。main.cとして保存。

#include 
#include 

void (*hp)(void);

int main(int argc, char **argv)
{
  void *p = dlopen("hoi.so", RTLD_NOW | RTLD_LOCAL);
  if(p == NULL){
   fprintf(stderr, "hoi.so: %s\n", dlerror());
   exit(1);
  }

  hp = (void (*)(void))dlsym(p, "hoi");

  if(!hp){
    fprintf(stderr, "hoi: %s\n", dlerror());
    exit(1);
  }

  hp();

  dlclose(p);
  return 0;
}


モジュールhoi.soのコンパイル (-archはユニバーサルバイナリを指定)


% gcc -arch i386 -arch ppc -arch x86_64 -fno-common hoi.c
% gcc -arch i386 -arch ppc -arch x86_64 -bundle -flat_namespace -undefined suppress -o hoi.so hoi.o

呼び出し側


% gcc -arch i386 -arch ppc -arch x86_64 main.c -o main -ldl

% ./main

hoi

いやー、単なる現実逃避。報告書めんどくせー。

このアーカイブについて

このページには、2010年3月以降に書かれたブログ記事のうちMemoカテゴリに属しているものが含まれています。

前のアーカイブはMemo: 2009年7月です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。

Powered by Movable Type 4.01