MSVC dll链接的顺序
MSVC Order in which DLLs are linked
我调试一个链接到两个dll的应用程序。当这些dll中的一个对象被实例化时,应用程序就会出现分段错误。然而,当(VS2010)链接器->输入->附加依赖中的.lib文件的顺序被交换时,应用程序运行良好。
这个解决方法目前有效,但我仍然想了解是什么导致了这个问题。任何提示,我如何进一步调试这个?
在没有更多信息的情况下,任何答案都只能是猜测,一个可能的原因如下:
-
在Windows中,每个DLL都有DLLMain()函数
-
一旦你有两个dll,它们将有两个DllMain()函数调用
-
如果两者之间存在依赖关系(即一个DLLMain()隐式依赖于在另一个DLLMain()中初始化的对象)-你有问题。
我自己也见过这样的问题(这显然是一个糟糕的编程实践,但它确实发生了)。然而,也可能存在一些其他的解释。
调试它的方法将是调试任何崩溃的方法:从在捕获段错误时检查堆栈开始。如果在调试构建时再现崩溃,那么理解直接原因应该是很简单的(根本原因通常需要更深入的调查)。
如果不查看这个堆栈,就无法说明崩溃的原因,但是可以合理地假设涉及到全局资源。一个命名的事件,通用的临时文件,也许是一些内部框架结构(如果有的话,你的代码中涉及到框架?)-但它必须是跨越单个DLL边界的东西,因此可能是应用程序范围内的资源。
相关文章:
- CMake-按正确顺序将项目与C运行时对象文件链接
- libavdevice 和 x11 的静态链接库应该以什么顺序链接?
- 链接库时的默认目录上的GCC或G 路径搜索顺序
- 编写链接函数的更短/更有效的方法,该函数按字典顺序添加新元素
- 双链表中按字母顺序排序的链接
- 为什么更改链接顺序可以修复一个系统上的一些链接错误?
- 链接列表并按字母顺序插入字符串
- 队列顺序中的链接列表
- AC_LANG_PROGRAM由于链接器选项的顺序失败了链接阶段
- 我如何附加双链接以指向正确的节点,以相反的顺序打印
- 如何更改静态链接库中常量字符串数组的Visual Studio C++初始化顺序
- 对同一对象进行评估的链接操作和顺序
- 链接列表:在C++中按物理和逻辑顺序显示列表
- 更改参数的顺序可解决链接器错误
- 如何确定最快的链接顺序
- 通过Microsoft Visual Studio 2010 IDE 进行精确的库链接顺序控制
- 方法链接中的C++执行顺序
- 没有调用C++析构函数,具体取决于链接顺序
- CMake和共享库的顺序相关链接
- 不同库中的相同符号和链接顺序