我有一个带有这些功能的DLL:
void __declspec(dllexport) foo1()
{
printf("1");
}
void foo2()
{
printf("2");
}
在Dependency Walker中打开DLL时,只有foo1()
显示为已导出,这是预期的。但是,当我在十六进制编辑器中打开DLL文件时,我注意到字符串_Z4foo2v
,它看起来像一个导出名称。
但由于foo2()
未标记为导出,为什么此字符串_Z4foo2v
存在?
答案 0 :(得分:1)
您是否构建了包含调试信息的库?因为如果使用调试信息构建它,则它是来自普通符号的符号。尝试剥离共享库,看看是否有这些符号。
实际上,如果您阅读man nm,您将看到--dynamic选项,用于切换要显示的部分类型(仅动态或全部)