2

関数「Foo」をエクスポートするdylib(私が作成したものではない)があるとします。私がそれを次のように宣言した場合

extern "C" void Foo(void);

それを呼び出そうとすると、それ_Fooが見つからないというリンカエラーが発生します。dylibを変更せずにこれに対処するにはどうすればよいですか? アンダースコアを予期しないようにするための、あいまいなリンカ フラグ、または宣言の Clang マークアップでしょうか。

4

2 に答える 2

4

これらの関数の少数については、gcc/clang 拡張 (OS X に最適) を使用して外部リンケージをアセンブリとして宣言するのが最も簡単です。

extern void Foo(void) asm ("Foo");

詳細については、この回答を参照してください。

于 2013-09-30T21:10:15.077 に答える
2

次を使用して、関数を手動でロードすることができますdlsym

#include <dlfcn.h>

static void (*Foo)(void);

/* In some initialization function... */
Foo = dlsym(RTLD_DEFAULT, "Foo");
于 2013-09-30T19:09:41.730 に答える