主要可执行文件上的dlopen()/ dlsym():它有多便携?

时间:2010-11-15 11:47:39

标签: unix dll dlopen

我正在构建一个编译器和一个虚拟机来执行我的字节码。该语言允许绑定外部C函数,这些函数可以在某些外部共享对象中定义,也可以在主编译器/ VM二进制文件(一些基本语言内置函数)中定义。

我知道我可以使用dlopen(NULL,...)动态绑定主可执行文件中的符号,但是在我对二进制文件运行strip之后不能。那么我有以下问题:

  1. 有没有办法在条带二进制文件上执行此操作?
  2. 这种功能在整个UNIX系统中的可移植性如何?
  3. 是否有可能以某种方式在Windows上执行相同的操作?
  4. 在主要可执行文件中动态绑定的任何替代方法吗?

1 个答案:

答案 0 :(得分:6)

  1. 使用strip -d代替仅删除调试符号。

  2. dlopen(3)手册页说:

    CONFORMING TO
           POSIX.1-2001 describes dlclose(), dlerror(), dlopen(), and dlsym().
    

    因此,在* nix上非常便携。

  3. Windows使用LoadLibrary()GetProcAddress()代替。

  4. 没有