【问题标题】:"Function has no address" despite disabled optimization (/Od)尽管禁用了优化 (/Od),但“函数没有地址”
【发布时间】:2015-02-02 16:36:19
【问题描述】:

在 MSVC 2012 的调试过程中,我尝试从 Watch 窗口调用一些函数,以便将数据转储到文件中。但是,我不断收到此错误:

Function Matrix::Save has no address, possibly due to compiler optimizations.   

Matrix 类位于我自己的外部库中。快速检查表明,外部库中的所有方法都没有地址,并且所有从 Watch 调用它们的尝试都会返回此错误,但在头文件中定义的方法除外。主项目中的方法无论在哪里定义都有地址。

当然,整个解决方案都禁用了优化。符号被正常加载。我该如何解决?

【问题讨论】:

  • 库是如何链接的?静止的?动态的?如果是动态的,如何加载?
  • 它是动态链接的。 “如何加载”是什么意思?
  • @AntonPoznyakovskiy 您可以进行隐式或显式加载。如果是隐式的,那么上面的方法可以正常工作。如果是显式的,那么您需要使用已存储的函数指针进行调用。
  • 你可以有一个可配置的硬编码转储方法。以前的监视窗口有问题:stackoverflow.com/questions/16844804/… 另外,它是否为您的 dll 加载了符号?如果不告诉它他们在哪里:msdn.microsoft.com/en-us/library/a3694ts5.aspx
  • 还是没有解决办法?我什至不明白为什么我会收到这个错误。

标签: c++ visual-c++ compiler-optimization msvc12


【解决方案1】:

到目前为止,我找到了一种静态构建外部库的解决方法。使用静态链接库,可以找到方法的地址。配置管理器允许为发布轻松保留动态库。

【讨论】:

  • @javaLover 恐怕我记不起更多细节了。五年前,我不再使用 C++。
【解决方案2】:

作为一种更简单的解决方法,您可以在当前代码分支中至少调用一次目标函数(Matrix::Save)。然后它会有一个地址,因为它被使用了。

【讨论】:

    猜你喜欢
    • 2021-10-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-26
    • 1970-01-01
    • 2021-09-09
    • 1970-01-01
    相关资源
    最近更新 更多