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

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

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

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

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

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

gcc -c foo.c -Dfoo=foo_renamed 

您可以使用gcc alias属性创建指向同一函数的多个符号。

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

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