为什么未导出的函数名称仍列在 MinGW DLL 中?
Why are un-exported functions' names still listed in MinGW DLLs?
我有一个具有这些功能的 DLL:
void __declspec(dllexport) foo1()
{
printf("1");
}
void foo2()
{
printf("2");
}
在 Dependency Walker 中打开 DLL 时,只有 foo1()
显示为已导出,这是预期的。但是,当我在十六进制编辑器中打开 DLL 文件时,我注意到字符串 _Z4foo2v
,它看起来像一个导出名称。
但是由于 foo2()
没有标记为导出,为什么这个字符串 _Z4foo2v
存在?
您是否构建了带有调试信息的库?因为如果你用调试信息构建它,它就是来自普通符号的符号。尝试剥离共享库并查看是否有这些符号。
实际上,如果您阅读 man nm,您会看到 --dynamic 选项,它可以切换要显示的部分类型(仅动态或全部)
我有一个具有这些功能的 DLL:
void __declspec(dllexport) foo1()
{
printf("1");
}
void foo2()
{
printf("2");
}
在 Dependency Walker 中打开 DLL 时,只有 foo1()
显示为已导出,这是预期的。但是,当我在十六进制编辑器中打开 DLL 文件时,我注意到字符串 _Z4foo2v
,它看起来像一个导出名称。
但是由于 foo2()
没有标记为导出,为什么这个字符串 _Z4foo2v
存在?
您是否构建了带有调试信息的库?因为如果你用调试信息构建它,它就是来自普通符号的符号。尝试剥离共享库并查看是否有这些符号。
实际上,如果您阅读 man nm,您会看到 --dynamic 选项,它可以切换要显示的部分类型(仅动态或全部)