- 论坛徽章:
- 0
|
原帖由 drowndog 于 2010-1-6 14:34 发表 ![]()
编译主程序时,加上-Wl,-E参数试试
foo.c:
#include <stdio.h>
void bar();
void foo()
{
printf("foo.........\n");
bar();
}
|
main.c:
#include <dlfcn.h>
#include <stdio.h>
typedef void(*FUNC_TYPE)();
void bar()
{
printf("bar.........\n");
}
int main()
{
void* lib = dlopen("libfoo.so", RTLD_NOW);
if (!lib)
{
printf("%s\n", dlerror());
return -1;
}
FUNC_TYPE f = (FUNC_TYPE)dlsym(lib, "foo");
if (!f)
{
printf("%s\n", dlerror());
return -2;
}
f();
dlclose(lib);
return 0;
}
|
编译:
gcc -shared -o libfoo.so foo.c
gcc -Wl,-E main.c -ldl
ben@ben-miracle:~/test/dlopen$ ./a.out
foo.........
bar.........
|
运行: |
|