【问题标题】:MSVC: __declspec(dllexport) does not symbolsMSVC:__declspec(dllexport) 没有符号
【发布时间】:2011-11-23 12:55:29
【问题描述】:

在 MSVC(尤其是 2010 版本)中编写 DLL 时,我遇到了一个小问题。 我的程序由主要部分和一个 DLL 组成。 DLL 包含的函数是

__declspec(dllexport) int test_function(void) {
    return 42;
}

该文件是使用 DLL 项目编译的(不使用预编译的头文件,我选择了一个空的 DLL 项目)。现在,当我想使用dumpbin 工具列出导出的符号时,test_function 未在导出下列出。是否有强制__declspec(dllexport) 实际导出符号的特定设置?

欢迎任何帮助。谢谢!

【问题讨论】:

  • 确定它没有被导出吗? dumpbin 的输出是什么?
  • 我会为“忘记使用 /exports 选项”付出代价。 “不认识这个被破坏的名字”的镍币。

标签: visual-c++ dll declspec


【解决方案1】:

应该这样做。如果这是整个代码,请检查以下内容:

1) 您实际上是在检查正确的 dll。看时间戳。仔细检查位置和名称。

2) 您正在编译指定的 cpp(我认为您的定义在 cpp 文件中)。仅仅因为文件在目录中并不意味着它已被编译,请确保将其添加到项目中。

3) 确保您的函数未被预处理器指令从编译单元中排除。

同时寻找其他符号并尝试查看导出的符号与您的函数之间有什么区别。

如果失败,您应该将__declspec(dllexport) 移动到您的.h 文件,并将定义(不带__declspec(dllexport))移动到您的.cpp。它可能不会被导出,因为编译器可能会尝试通过内联它来优化它。

【讨论】:

    猜你喜欢
    • 2018-08-05
    • 2023-01-26
    • 2015-02-24
    • 1970-01-01
    • 2016-03-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-14
    相关资源
    最近更新 更多