関数「Foo」をエクスポートするdylib(私が作成したものではない)があるとします。私がそれを次のように宣言した場合
extern "C" void Foo(void);
それを呼び出そうとすると、それ_Foo
が見つからないというリンカエラーが発生します。dylibを変更せずにこれに対処するにはどうすればよいですか? アンダースコアを予期しないようにするための、あいまいなリンカ フラグ、または宣言の Clang マークアップでしょうか。
これらの関数の少数については、gcc/clang 拡張 (OS X に最適) を使用して外部リンケージをアセンブリとして宣言するのが最も簡単です。
extern void Foo(void) asm ("Foo");
詳細については、この回答を参照してください。
次を使用して、関数を手動でロードすることができますdlsym
。
#include <dlfcn.h>
static void (*Foo)(void);
/* In some initialization function... */
Foo = dlsym(RTLD_DEFAULT, "Foo");