在创建静态对象时,是否可以在跨平台的方式在编译时重命名符号(不更改代码)?我最近推荐使用objcopy,但linux并不是唯一一个必须在mac上工作的目标平台。我正在使用gcc进行编译,所以我希望有某种gcc选项。
我听说过.def文件,但这可能会误导,因为我发现的有关它们的信息似乎是针对Windows的。
编辑: 我正在尝试更改C和Fortran函数的名称,特别是使用“wrap”一词预先挂起它们,以避免链接时出现符号冲突。
答案 0 :(得分:6)
是否可以在编译时重命名符号
您可以使用预处理器实现它:
gcc -c foo.c -Dfoo=foo_renamed
答案 1 :(得分:5)
您可以使用gcc alias属性制作指向同一功能的多个符号。
void name1() __attribute__((alias ("name2")));
我不确定alias属性是否适用于其他类型的符号(例如变量)。