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

标签 c++ dll mingw

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

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

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

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

但是由于 foo2() 没有被标记为导出,为什么这个字符串 _Z4foo2v 存在?

最佳答案

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

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

关于c++ - 为什么未导出的函数名称仍列在 MinGW DLL 中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31532793/

相关文章:

python - pip install 给出 : skipping incompatible python libs and gcc failed with exit status 1

c - GCC 中的内联汇编,通过表达式指定偏移量

c - GLib-GIO-错误** : No GSettings schemas are installed on the system

c++ - 使用 mersenne twister c++ 生成数字 (0,1)

c++ - 堆栈溢出运行时错误c++

c# - .NET DLL 是静态链接还是动态链接?

c# - 未找到 Clickonce 部署外部 dll 引用

java - 有人可以指出我做错了什么吗?尝试使用 JNA 将 VB 映射到 Java 来访问该库

C# 看不到带参数的 C++ 构造函数

c++ - Visual Studio 2019 C++ 无法识别模板 friend