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

发布于 2024-12-01 14:04:47 字数 251 浏览 0 评论 0原文

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

我听说过 .def 文件,但这可能具有误导性,因为我发现的有关它们的信息似乎适用于 Windows。

编辑: 我正在尝试更改 C 和 Fortran 函数的名称,特别是在它们前面加上“wrap”一词,以避免链接时的符号冲突。

In creating a static object is it possible to rename the symbols at compile time (without changing the code) in a cross platform way? I have recently had objcopy recommended, but linux is not the only target platform it must also work on a mac. I am compiling using gcc, so I was hoping that there was a gcc option of some sort.

I have heard about .def files, but this may have been misleading as the information about them that I have found seems to be for windows.

Edit:
I'm trying to change the name of C and Fortran functions, specifically pre-pending them with the word "wrap" in order to avoid symbol conflicts at link time.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

花海 2024-12-08 14:04:47

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

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

gcc -c foo.c -Dfoo=foo_renamed

is it possible to rename the symbols at compile time

You might be able to achieve it with preprocessor:

gcc -c foo.c -Dfoo=foo_renamed
北笙凉宸 2024-12-08 14:04:47

您可以使用 gcc alias 属性来创建多个指向相同的功能。

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

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

You can use the gcc alias attribute to make multiple symbols that point to the same function.

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

I'm not sure if the alias attribute works for other types of symbols (e.g. variables).

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文