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

Vol*_*orm 6 c linker fortran symbols

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

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

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

Emp*_*ian 6

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

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

gcc -c foo.c -Dfoo=foo_renamed
Run Code Online (Sandbox Code Playgroud)


Dav*_*son 5

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

void name1() __attribute__((alias ("name2")));
Run Code Online (Sandbox Code Playgroud)

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