linker-errors - 在 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 文件,并注释掉正在调用的方法,那么程序将编译并运行(因为它不再调用所需的例程,所以不起作用)。
解决方案
推荐阅读
- javascript - 在所有组件上显示加载微调器图标
- angular - Angular 在嵌套组件中显示模态
- shell - 获取特定列中的匹配字符串
- python - 安装到特定的python子版本
- javascript - 如何获取为页面加载的所有请求的响应正文?
- javascript - this.props.dispatch 不是与 redux 反应的函数
- java - 是否可以在 jar 文件中为 android 提供 sqlite 表
- xslt - XSLT 按属性复制
- google-bigquery - BigQuery 区块链数据集缺少数据?
- javascript - div 边框内的动画图像