【问题标题】:DLL redirect export without using def fileDLL 重定向导出而不使用 def 文件
【发布时间】:2013-07-23 09:04:45
【问题描述】:

有没有办法指示 MinGW-w64 或 CodeBlocks 项目在 def 文件中生成行,如下所示: func2=func1

int __attribute__((dllimport)) Double (int);
int __attribute__((dllexport,alias("Double"))) NextDouble(int);

我认为这会起作用,但编译器会发出错误:

|2|error: 'NextDouble' aliased to undefined symbol 'Double'|

有没有办法绕过链接器的别名?

澄清:

我有一个 DLL 的导入库,它导出 Double。我正在尝试创建第二个 DLL,它将导入 Double 并导出 NextDouble,它将指向导入的 Double 的地址。所以就像我将在 def-file 中执行 NextDouble=Double 一样。这将使 dll 中的导出 NextDouble 指向导入 Double。

【问题讨论】:

  • 您是否要为函数创建一个命名别名?你的实际用例是什么? (将其添加到您的问题中,而不是作为评论)
  • 我想我解决了,当我尝试时,我会发布整个事情。
  • 是来自另一个 dll 模块的 Double 吗?您不能为驻留在另一个 dll 中的符号创建别名。
  • 是的,它是:( 否则很容易解决
  • 最好解释一下您要解决的问题。为什么你认为你需要做这样的事情?

标签: dll mingw codeblocks


【解决方案1】:

这里是预处理器,可以在-o阶段命令行中添加字符:

#define first ".section .drectve\n.ascii\"
#define last \""
#define addcmd(name) first name last
#define cmd(name) asm(addcmd( name ))
cmd(thingtoadd)

所以你可以添加任何意味着 def 文件的东西。

【讨论】:

  • 你能展示一下预处理后宏扩展成什么吗?有一些宏没有像linkit 那样定义。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-09-16
  • 2020-10-03
  • 2010-09-26
  • 2010-09-06
  • 2013-01-02
  • 2014-04-29
相关资源
最近更新 更多