prasinos' work memo

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

Cygwin で DLL を作ってみるの記

さて、 Windows で ruby が使えるようになったので、これに既存 C コードをはめこむことを考える。結論からいうと Cygwin で作った DLL は ASR からは呼べないみたいだ。
まずは Cygwin で DLL の作り方を学習したので記録しておく。

ライブラリのソースコードやコンパイルは普通でよい。ただ、最後にオブジェクト *.o を ar で固めるんじゃなくて gcc -shared でリンクして DLL にする。

$ cat csub.c
int sub(int a, int b)
{
        return a - b;
}
$ gcc -c csub.c
$ gcc -shared csub.dll csub.o
メインプログラムも普通に書く。リンクするときは、あたかも csub.dll が libcsub.a であるかのように扱えばよい。
$ cat cmain.c
#include <stdio.h>
#include <stdlib.h>

int sub(int a, int b);

int main(int argc, char **argv)
{
        int a, b;
        a = (argc > 1) ? atoi(argv[1]) : 0;
        b = (argc > 2) ? atoi(argv[2]) : 0;
        printf("%d - %d = %d\n", a, b, sub(a, b));
        return 0;
}
$ gcc -o cmain cmain.c -L. -lcsub
$ ./cmain 1333 141
1333 - 141 = 1192
さてこうして作られた DLL を Cygwin 版 ruby から呼ぶことができる。
$ cat ccall.rb
require 'Win32API'
obj = Win32API.new('csub.dll', 'sub', 'ii', 'i')
p obj.call(ARGV[0].to_i, ARGV[1].to_i)
$ ruby ccall.rb 1333 141
1192
ただ、ASR から呼ぶと cygwin1.dll がないといって爆死する。 cygwin1.dll を置いてやると、今度は固まってしまう。 ま、人生そんなもんだ。
スポンサーサイト

コメント

-mno-cygwinをつける

  • 2010/08/04(水) 16:58:29 |
  • URL |
  • 通縋 #mQop/nM.
  • [ 編集 ]

コメントの投稿


管理者にだけ表示を許可する

トラックバック

トラックバック URL
http://prasinos.blog2.fc2.com/tb.php/624-4a498675
この記事にトラックバックする(FC2ブログユーザー)

FC2Ad

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。