使用链接描述文件重命名符号

oka*_*api 2 linker ld linker-scripts

是否可以使用链接描述文件或映射文件来重命名符号?我正在尝试修改一些用C ++和Fortran混合编写的代码,以便它可以在Linux上与多个Fortran编译器一起使用。目前,它是为Solaris Studio编译器编写的,并且启用了区分大小写的选项。我想自动处理Fortran符号名称的变化(例如来自Makefile)。

似乎确实可以创建别名,因此,包含以下内容的链接描述文件:

C_Function_ = c_function;
Run Code Online (Sandbox Code Playgroud)

将工作。不幸的是,添加-T选项以引用此脚本会导致其他行为更改,由于找不到libdl.so.2 / librt.so.1,我得到了错误。我需要包括某种默认的链接描述文件吗?我已经尝试过在Linux上使用bfd和gold链接器。

mfr*_*fro 6

您不能真正重命名符号,但是可以为现有符号定义别名,例如

PROVIDE(c_function = C_function_);
...
Run Code Online (Sandbox Code Playgroud)

在链接描述文件中。

如果将此链接描述文件传递给-T选项ld,则它将替换原始(默认)链接描述文件。如果您想让链接描述文件扩展默认值,则在不带-T选项的情况下传递它(就像使用其他目标文件一样)。

这样,一切都会按预期工作。