在 64 位 linux 中使用 delphi 链接到单独的共享对象库时,不支持的 ELF 文件类型 2

问题描述

在下文中,已使用带有最新补丁的 Delphi XE 10.4.2(截至 2021 年 6 月 9 日)和带有所有更新的 RHEL 8。

Delphi 10.4.2 似乎无法链接 .o 文件,所以我创建了一个共享库,其中包含 .o 文件中的以下内容

cc -o libd3.so -m64 /usr/lib/pick/gid.o /usr/lib/pick/gmpcb.o /usr/lib/pick/ld.import.lx64.o /usr/lib/pick/flashvers.o /usr/lib/pick/px.mqs.sv.o /usr/lib/pick/SQLfunc.o /usr/lib/pick/odbcfunc.o \
/usr/lib/pick/show_net_dummy.o \
-lcgm -lm -lc -lcurl -L/usr/lib/pick -L./ -Wl,--start-group -lcgm -lgm -lgmu -lCP -lCPm -lsqla -lsqln -Wl,--end-group -lTllsApi -lxdmscapi -ld3pyembed -lpam /usr/lib/pick/dummyssl.o -lpthread -ldl

创建 libd3.so 没有错误地完成

然后我使用 delphi 的“Edit SDK”页面在我的本地机器上“更新文件缓存”,并使用 Shift-F9 重建所有。

我收到此错误

[DCC Error] E2597 C:\Program Files (x86)\Embarcadero\Studio\21.0\bin\ld-linux.exe: error: C:\\Users\\andrew\\Documents\\Embarcadero\\Studio\\SDKs\\rhel8.4.sdk\\usr\\lib64/libd3.so: unsupported ELF file type 2

以及其中一些

C:\\Users\\andrew\\Documents\\Embarcadero\\Studio\\SDKs\\rhel8.4.sdk/usr/lib64/libc_nonshared.a(atexit.oS)(.gnu.build.attributes+0x18): warning: relocation refers to discarded section

忽略一些文件来自 /usr/lib/pick 而不是 usr/lib64/pick 的事实,这是安装文件的异常,它们确实是 64 位文件。

我尝试了许多链接器选项,但似乎无法让它们工作。如果我不加载 .so 文件,并注释掉被调用的方法,那么程序将编译并运行(不起作用,因为它不再调用所需的例程)。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...