在编译时重命名符号,而不以跨平台方式更改代码

时间:2011-08-26 12:47:50

标签: c linker fortran symbols

在创建静态对象时,是否可以在跨平台的方式在编译时重命名符号(不更改代码)?我最近推荐使用objcopy,但linux并不是唯一一个必须在mac上工作的目标平台。我正在使用gcc进行编译,所以我希望有某种gcc选项。

我听说过.def文件,但这可能会误导,因为我发现的有关它们的信息似乎是针对Windows的。

编辑: 我正在尝试更改C和Fortran函数的名称,特别是使用“wrap”一词预先挂起它们,以避免链接时出现符号冲突。

2 个答案:

答案 0 :(得分:6)

  

是否可以在编译时重命名符号

您可以使用预处理器实现它:

gcc -c foo.c -Dfoo=foo_renamed

答案 1 :(得分:5)

您可以使用gcc alias属性制作指向同一功能的多个符号。

void name1() __attribute__((alias ("name2")));

我不确定alias属性是否适用于其他类型的符号(例如变量)。