MinGW - 一旦加载了.dll,应用程序就会以不寻常的方式终止(在完成之后)

时间:2015-03-02 13:01:31

标签: windows gcc cygwin mingw

在使用Cygwin的MinGW进行编译时,我遇到了在Windows上动态加载共享库的问题。

该应用程序由6个部分组成:2个静态库,3个共享库和1个可执行文件,它们使用静态库并在运行时加载共享库。

我在Cygwin中使用i686-pc-mingw32-g++。所有源文件都使用-std=c++11标志进行编译,它们的链接如下:

Static libraries:
   i686-pc-mingw32-ar rcs libxxx.a bin/*.o
   i686-pc-mingw32-ar rcs libyyy.a bin/*.o

Each shared library:
   i686-pc-mingw32-g++ -fPIC -shared -o ###.dll bin/*.o -lxxx -L../xxx -lyyy -L../yyy

Executable:
   i686-pc-mingw32-g++ -o program.exe bin/*.o -lxxx -L../xxx -lyyy -L../yyy -static

应用程序运行正常并完成预期的操作,但是一旦程序完成执行并从main方法返回,我收到消息:

This application has requested the Runtime to terminate it in an unusual way.
Please contact the application's support team for more information.

这只在我加载其中一个共享库时发生;如果我不这样做,应用程序将在没有消息的情况下终止。

我怀疑这个程序与Windows'有关。 LoadLibrary;我还尝试在从main返回之前手动释放每个库,但是会出现同样的问题。

注意:当使用相同的代码与Cygwin的GCC进行编译时,消息不会发生并且一切正常。

非常感谢任何帮助。

编辑:还有一件事:当我在没有" -static"的情况下链接二进制文件时,它不会崩溃。

2 个答案:

答案 0 :(得分:0)

我之前见过类似的事情: http://thread.gmane.org/gmane.comp.gnu.mingw.user/41724

这适用于您的情况吗?特别是: http://thread.gmane.org/gmane.comp.gnu.mingw.user/41724/focus=41738

及其后续行动?

答案 1 :(得分:0)