【发布时间】:2016-01-20 19:23:40
【问题描述】:
我一直在设置我的应用程序以在 Windows 8 上编译,使用 mingw32(准确地说是 i686-w64-mingw32)。据我所知,我已经正确设置了工具链和链接等,并且应用程序在代码块内编译和运行。当我尝试在代码块之外运行发布版本时。我的应用程序依赖于 libsndfile-1、csound 和一些 SDL2 库。 Libsndfile 和 csound 是静态链接的,SDL2 是动态链接的。在我的项目文件夹中,我的 SDL2 DLL 位于 \GUI\bin 中。
当试图在代码块之外运行 .exe 时...如果我将 DLL 粘贴在一个文件夹中,该文件夹与项目文件夹中的 .exe 具有相同的相对文件路径(即 \GUI\bin),我会收到一个错误消息告诉我它找不到 SDL2 DLL
如果我将 DLL 与 .exe 放在同一个文件夹中,我会收到以下消息:
过程入口点 _ZNSt7__cxx1112basic_stringlcst11char_traitslcSt11char_traitslcESalcEE10_M_replaceEjjPKcj 在动态链接库中找不到 C:\Users\Peter\Documents\SDLGUIApp\bin\Release\SDL GUI.exe
我进行了一些研究,但我很难找到与我的情况相关的信息。当我将它们移动到与 .exe 相同的文件夹时,看到它会丢弃“找不到 DLL”错误消息,那么我猜它要么在同一个文件夹中找到它们,而这个错误是由其他原因引起的,或者,与将它们移到“正确”位置相比,将它们移动到同一个文件夹甚至更不满意。不管怎样,我被难住了!
任何帮助将不胜感激!
皮特
编辑:
我发现的一些资料表明,我链接到库的顺序可能会导致类似(尽管不相同)的错误。我试过把它们改组,但我没有试过让它变得更好。这是我的链接方式:
在其他链接器选项中:
-lmingw32 -lSDL2main -lSDL2 -lSDL2_image -lSDL2_mixer -lSDL2_ttf
在链接库中:
C:\Program Files\Libraries\Csound6\bin\csound64.lib C:\Program 文件\库\libsndfile32\lib\libsndfile-1.lib
查看代码块的构建日志表明它首先链接“其他链接器选项”。我假设是这样,因为构建日志的最后一部分是这样说的:
-lmingw32 -lSDL2main -lSDL2 -lSDL2_image -lSDL2_mixer -lSDL2_ttf -s -mwindows -lmingw32 "C:\Program Files\Libraries\Csound6\bin\csound64.lib" "C:\Program 文件\库\libsndfile32\lib\libsndfile-1.lib"
我不确定 -s 是什么意思,或者为什么它两次提到 -lmingw32。
编辑:
对不起,进一步的编辑...我已经了解了由于没有 main 功能,或者在代码块构建选项中选择了错误的构建类型(通常是控制台或 GUI 应用程序之间的区别)在类型选项下设置)。我已经尝试探索这些想法,但我肯定有一个“int main()”函数,main.cpp 包含在调试和发布版本中,并且我选择了“控制台应用程序”作为调试和发布的构建类型,据我所知,错误不是因为这些。
【问题讨论】:
标签: c++ windows dll runtime-error