C言語におけるリフレクション
コマンドライン引数で渡された名前の関数を呼ぶ、というようなJavaなどの非Native言語なら簡単にできる処理がC言語ではできないのです。
以前Javaで実装していたとあるツールの新版をCで書いているのですが、この部分が実装できずにいたため、使い勝手が少々悪くなっていました。
しかし、最近読でいる『Binary Hack』によると、Cでもリフレクションを実現できるようにするためのライブラリが存在するということが分かりました。
ubuntuだと、以下のパッケージ名で入手できます。たぶん他のLinuxディストリも似たような名前でゲットできるでせう。
- libffcall1
- libffcall1-dev
とりあえずこのライブラリを使って想定通りの処理が実装できるのか試しています。
dlopenとdlsymが無いとldに怒られました。なぜだろう・・・。
libitdl.soにstringsしたら入ってたけど、nmだと出てこないっ! なにか根本的な勘違いをしているっぽい。そもそもsoファイルからはnmしても何もでてこないっぽい。
nmの話はさておき、-lつけ忘れ。。。 かなしすw