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

问题描述:

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

它似乎可以创建别名左右,包含链接脚本:

C_Function_ = c_function; 

将排序的工作。不幸的是,添加-T选项来引用这个脚本会导致一些其他的行为变化,并且由于没有找到libdl.so.2/librt.so.1而导致错误。是否有某种我需要包含的默认链接器脚本或其他内容?我已经在Linux上尝试了bfd和gold连接器。

你真的不能重命名符号,但是你可以定义别名现有符号像

PROVIDE(c_function = C_function_); 
... 
在链接脚本

如果你通过这个链接脚本与-T选项ld,它将取代原始(默认)链接脚本。如果您希望链接描述文件扩展为默认值,请在不使用-T选项的情况下传递它(就像使用其他对象文件一样)。

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

+0

谢谢,省略'-T'解决了这个问题。 “PROVIDE”做什么?这可以防止它在符号被编译到共享库的情况下工作。 – okapi

+0

'PROVIDE()'确保符号只有在所使用的名称不存在时才是别名。但不知道为什么这会与构建共享库相冲突。 – mfro