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

moj*_*uba 4 unix dll dlopen

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

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

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

Ign*_*ams 6

  1. strip -d而是使用仅剥离调试符号.

  2. dlopen(3)手册页说:

    CONFORMING TO
           POSIX.1-2001 describes dlclose(), dlerror(), dlopen(), and dlsym().
    
    Run Code Online (Sandbox Code Playgroud)

    因此,*nix非常便携.

  3. Windows使用LoadLibrary()GetProcAddress()不是.

  4. 没有.