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 回答