如何解决在 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 举报,一经查实,本站将立刻删除。