gpt4 book ai didi

c++ - Linux 上是否有等效的 .def 文件来控制共享库中导出的函数名称?

转载 作者:IT老高 更新时间:2023-10-28 22:35:10 27 4
gpt4 key购买 nike

我正在 Ubuntu 9.10 上构建一个共享库。我只想从库中导出我的一部分函数。在 Windows 平台上,这将使用模块定义 (.def) 文件来完成,该文件将包含从库中导出的函数的外部和内部名称列表。

我有以下问题:

  1. 如何将共享库的导出函数限制为我想要的函数(即 .def 文件等效项)

  2. 以 .def 文件为例,您可以为函数指定与其内部名称不同的外部名称(有助于防止名称冲突以及重新修饰名称困惑等)

  3. 在 windows 上我可以使用 EXPORT 命令 (IIRC) 检查导出的函数和地址列表,在 Linux 上执行此操作的等效方法是什么?

最佳答案

在 linux 上仅使某些符号在共享对象中可见的最常见方法是传递 -fvisibility=hidden到 gcc,然后用 __attribute__((visibility("default"))) 装饰您希望可见的符号.

如果您正在寻找类似导出文件的解决方案,您可能需要查看链接器选项 --retain-symbols-file=FILENAME这可能会满足您的需求。

我不知道导出函数名称与其函数名称不同的函数的简单方法,但使用 elf 编辑器可能是可行的。 编辑: 我认为您可以使用链接器脚本(查看 ld 的手册页)在链接步骤中为符号分配值,从而为给定函数提供替代名称。请注意,我实际上从未尝试过。

要查看共享对象中的可见符号,您可以使用 readelf命令。 readelf -Ds如果我没记错的话。

关于c++ - Linux 上是否有等效的 .def 文件来控制共享库中导出的函数名称?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2839504/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com