今日はとことん攻めます。 題名の通りです。 Hige.cpp char** argvを受け取ってループで出力する関数を追加します。 void Hige::printArray(char** argv) { int i = 0; while (argv[i]) { fprintf(stdout, "argv[%d] = %s\n", i,argv[i]); i++; } } Hige.i Perl の配列 ⇔ char** のtypemapを追加します。 これは SWIGのマニュアルを読むとこっそりとかいてあります。 // This tells SWIG to treat char ** as a special case %typemap(in) char ** { AV *tempav; I32 len; int i; SV **tv; if (!SvROK($input)) croak
http://swig.shibu.jp/によると SWIGはさまざまな高レベルプログラミング言語とC/C++で書かれたプログラムをつなぐ開発ツールです。SWIGは主に、Perl, Python, Tcl/Tk, Ruby, Guile, MzSchemeなどの一般的なスクリプト言語から使われますが、JavaやEiffelのような非スクリプト言語もサポート言語に含まれています。 SWIGは一般的には、高級インタプリタプログラミング環境を作り、ユーザインタフェースを作成するという使われかたをします。SWIGは使用も頒布も、商用・非商用向けの改変もすべてフリーです。 では早速、PerlからC++のコードを呼ぶのをやってみます。 swigは事前にインストールされていると仮定します。 用意するファイルは3つ test/Hige.h test/Hige.cpp test/Hige.i Hige.h
ACさんから教えていただいた Program Library HOWTO: http://www.linux.or.jp/JF/JFdocs/Program-Library-HOWTO/ 非常によくまとまっていて疑問が氷解しました。 重要そうなところを引用します。 静的ライブラリ .aは静的ライブラリ。arコマンドでオブジェクトファイルをまとめたもの。 静的ライブラリは -l オプションでリンクを行う 共有ライブラリ すべての共有ライブラリは「soname」という特別な名前をもつ。 ディレクトリ名libxxx.so.バージョン番号 バージョン番号はインターフェースが変わったときに変わる。 すべての共有ライブラリは「realname」という特別な名前を持つ。 soname.マイナー番号.リリース番号 「linker name」 sonameからバージョン番号を除いたもの ldconfig は
日本語訳:2004 年 9 月 17 日 (原文:2003 年 4 月 28 日、バージョン 1.20) この HOWTO はプログラマ向けであり、Linux におけるプログラムライブラリの作成方法と使用方法を説明するものです。 「静的ライブラリ (static library)」、「共有ライブラリ (shared library)」、「動的ライブラリ (dynamically loaded library)」を対象とします。 (訳注:この訳文では、「dynamically loaded library」のことを「動的ライブラリ」と呼ぶことにします。 世の中では、shared library のことを指して動的ライブラリと表現する例もありますが、それとは異なりますので注意してください。) Table of Contents1. はじめに2. 静的ライブラリ3. 共有ライブラリ3.1. 約
Welcome to SWIG SWIG is a software development tool that connects programs written in C and C++ with a variety of high-level programming languages. SWIG is used with different types of target languages including common scripting languages such as Javascript, Perl, PHP, Python, Tcl and Ruby. The list of supported languages also includes non-scripting languages such as C#, D, Go language, Java inclu
はてなでは XS を使い始めて処理速度が改善されつつあるようです。 スクリプト言語へのバインディングは、もはやミドルウェアには必須の機能だと思います。 しかし、最近気になっているのは、少なくとも日本では XS 直書きのようなスクリプト言語固有の機能を直接使ってバインディングを作成している開発者が圧倒的に多いということです。 正直なところSWIG をもっと使ってほしいです。 私が気に入っている点は以下です。 1. SWIG はスクリプト言語固有のバインディング作成バッドノウハウを エレガントにラップしてくれます。たとえば、例外処理などがいい例ですが、 SWIG のインタフェイス上で例外処理を書いておけば、 各言語の例外処理のシンタックスに適切に変換してくれます。 2. バンディングレベルで OOP の機能が無く、プリミティブな関数呼び出ししかできない スクリプト言語(perl,python,
はじめに Rubyと同じく、C++もクラスをもっています。 SwigをつかえばC++のクラスをそのままRubyのクラスにすることができます。 SwigのドキュメントにC++の章がありますので、 まずはそちら "5 SWIGとC++" を読みましょう。 C++で書かれたあるソフトをswigを利用してラップする場合、 インストールされるヘッダーファイルがたいへん役に立ちます。 運が良ければそのヘッダーファイルがそのまま使えますが、 多くの場合多少変更が必要となります。 ここでは、 C++で書かれたソフトをラップする際に必要ないくつかの変更の解説を行います。 まずはヘッダーファイルをそのまま使ってみよう とりあえずヘッダーファイルをそのまま使ってみましょう。 そのままで問題なくコンパイルでき、かつ使えたあなたは幸運です。 だめな場合でもエラーメッセージがとても重要な情報となります。 以下のように
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く