MinGW gcc 生成动态链接库 dll 的一些问题汇总 (补充)

我曾经写过一个小短文,介绍MinGW gcc 生成动态链接库 dll 的一些问题。当时写的并不全面。最近又遇到写新的问题。这里记录一下,做个补充。

通常情况下,dll 中的函数如果采用 _stdcall ,则生成的dll中函数名会被修饰。
比如有如下的函数:

//dll.c
int  _stdcall add(int a, int b)
{
    return a + b;
}

最终 dll 文件中的函数名是 add@8

但是有时我们希望函数名不要添加这种修饰,就像 windows api 函数那样。如果用VS 编译器的话需要我们写个 def 文件才能实现。如果导出的函数很多,这样是很繁琐的。
利用 MinGW gcc 就简单的多。下面的语句就可以实现:

gcc dll.c  -shared -o dll2.dll -Wl,--kill-at,--output-def,dll2.def,--out-implib,dll2.a

这样生成的 dll2.dll 中函数名就没有多余的修饰。

这样的dll如何使用了。我们用gcc 编译时需要给链接器传个参数:

gcc -Wl,--enable-stdcall-fixup main.c dll2.a -o test.exe
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值