小编use*_*737的帖子

从共享库获取函数指针之间的区别

问题是如何从共享库(UNIX/LINUX)获取函数地址?

我在C中编写了一些测试用例(见下文),在Ubuntu 10.04(amd64)和FreeBSD-8.2(amd64)上编译和运行.我没有感觉到任何差异,但我想知道更多关于可能的麻烦.

他们来了:

  1. 测试1

lib.c

char* f0(void) {
    return "Hello, World!";
}
Run Code Online (Sandbox Code Playgroud)

main.c中

#include <dlfcn.h>
#include <stdlib.h>
#include <stdio.h>

void *hlib, *addr;
char* (*foo)(void);
char* s;

int main(int argc, char** argv) {
    if ( !(hlib = dlopen("./lib.so", RTLD_LAZY)) )
      return 1;
    if ( !(addr = foo = dlsym(hlib, "f0")) )
      return 2;
    s = foo();
    printf("%p => %s\n", addr, s);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

现在构建它:

gcc -o lib.o -c lib.c -Wall -Werror -O3 -fPIC
gcc -o lib.so -shared -nostartfiles lib.o …
Run Code Online (Sandbox Code Playgroud)

c shared-libraries

5
推荐指数
1
解决办法
1362
查看次数

标签 统计

c ×1

shared-libraries ×1