为什么未导出函数的名称仍然列在MinGW DLL中?

时间:2015-07-21 07:26:07

标签: c++ dll mingw

我有一个带有这些功能的DLL:

void __declspec(dllexport) foo1()
{
    printf("1");
}

void foo2()
{
    printf("2");
}

在Dependency Walker中打开DLL时,只有foo1()显示为已导出,这是预期的。但是,当我在十六进制编辑器中打开DLL文件时,我注意到字符串_Z4foo2v,它看起来像一个导出名称。

但由于foo2()未标记为导出,为什么此字符串_Z4foo2v存在?

1 个答案:

答案 0 :(得分:1)

您是否构建了包含调试信息的库?因为如果使用调试信息构建它,则它是来自普通符号的符号。尝试剥离共享库,看看是否有这些符号。

实际上,如果您阅读man nm,您将看到--dynamic选项,用于切换要显示的部分类型(仅动态或全部)