2015-07-21 28 views
0

我有这些功能的DLL:为什么未导出函数的名称仍然列在MinGW DLL中?

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

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

当打开在相关性沃克DLL,仅foo1()被示为输出,其被预期。但是,当我在十六进制编辑器中打开DLL文件时,我注意到字符串_Z4foo2v,它看起来像一个导出名称。

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

+0

你有没有建立与调试信息库或不--dynamic选项?因为如果您使用调试信息构建它,它是来自正常符号的符号。尝试去除共享库,看看是否有这些符号。 –

+0

这是一个调试版本,是的。我尝试了发布版本,'foo2()'确实没有在那里列出。谢谢,您可以将其作为答案发布。 – sashoalm

+0

其实如果你读'man nm',你会看到'--dynamic'选项,它切换显示哪些类型的部分(仅动态或全部) –

回答

1

你有没有建立一个带有调试信息的库?因为如果您使用调试信息构建它,它是来自普通符号的符号。尝试去除共享库,看看是否有这些符号。

其实如果你看过的人处,你会看到它切换到(动态只或全部)显示什么类型的部分

相关问题