首页 > 解决方案 > 在 linux 64 位中使用 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“编辑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 文件,并注释掉正在调用的方法,那么程序将编译并运行(因为它不再调用所需的例程,所以不起作用)。

标签: linker-errorsdelphi-xerhel8

解决方案


推荐阅读