共享对象未加载,在 dlopen 上出现分段错误

Shared Object not loading, gives segmentation fault on dlopen

我有很多代码是在 32 位机器上写的。现在我已经升级到 64 位,它不会加载共享对象。共享对象编译为 32 位(使用 DMD 的 -m32 标志),主机应用程序也是如此。 这是共享库:

module lib;

export extern(C) int abcd(){
    return 4;
}

使用dmd -shared -m32 lib.d编译,输出为lib.so 这是加载程序的代码:

module loader;

import std.stdio;
import core.sys.posix.dlfcn;

alias func = extern(C) int function();

void main(string[] args){
    writeln("reached 0, press enter");readln;
    void* so = dlopen("/home/nafees/Desktop/temp/lib.so",RTLD_LAZY);
    writeln("reached 1, press enter");readln;
    func f = cast(func)dlsym(so,"abcd");
    writeln((*f)());
}

这个是使用dmd -m32 loader.d编译的。它编译得很好,但是当我 运行 它时,它 运行 很好直到 dlopen,然后导致 segmentation fault(core dumped)。这曾经在 32 位上运行良好。

这段代码有什么问题,为什么它不起作用?

P.S:我不想为 64 位编译它,所以如果解决方案需要删除 -m32,我需要另一个。

编辑:我编译了一个程序(也是用 D 编写的),它使用 dlopen 加载了一个共享对象(也是用 D 编写的)。该程序 运行 在 32 位机器上运行良好,但在我的 64 位机器上则不行。

EDIT2:我现在尝试在没有 -m32 的情况下编译加载程序,现在 dlerror 是这样说的:/home/nafees/Desktop/temp/lib.so: wrong ELF class: ELFCLASS32

尝试使用 loadLibrary.

而不是 dlopen

更新:

使用 -fPIC 标志进行编译 lib.d: dmd -m32 -fPIC -共享 lib.d