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

posted @ 2016-02-16 15:17  lcchuguo  阅读(343)  评论(0编辑  收藏  举报