我调试了一个链接两个DLL的应用程序。当实例化来自这些DLL之一的对象时,应用程序会发生段错误。但是,当交换(VS2010)链接器 - >输入 - >附加依赖项中的.lib文件的顺序时,应用程序运行正常。
此解决方法目前有效,但我仍想了解导致问题的原因。任何提示,我该如何进一步调试呢?
答案 0 :(得分:0)
虽然没有更多信息,任何答案都必然是一种推测,但潜在的原因如下:
,每个DLL都有DLLMain()函数
只要有两个DLL,就会有两个DllMain()函数调用
如果两者之间存在依赖关系(即一个DLLMain()隐式依赖于在另一个内部初始化的对象) - 则有问题。
我自己已经看到过这样的问题(这显然是一个糟糕的编程习惯,但它确实发生了)。但是,也可能存在许多其他解释。
答案 1 :(得分:0)
调试它的方法是调试任何崩溃的方法:首先检查segfault的catch处的堆栈。如果崩溃在调试版本中重现,理解直接原因应该是直截了当的(根本原因通常需要更深入的调查)。
在没有查看此堆栈的情况下,可以说崩溃的原因并不多,但可以合理地假设涉及全局资源。一个命名事件,常见的临时文件,也许是一些内部框架结构(如果有的话,代码中包含哪些框架?) - 但它必须是跨越各个DLL边界的东西,因此可能是应用程序范围内的资源。