我一直在设置我的应用程序在Windows 8上编译,使用mingw32(准确地说是i686-w64-mingw32)。据我所知,我已经正确设置了工具链和链接等,应用程序编译并在代码块内部运行。当我尝试在codeblocks之外运行发布版本时。我的应用程序依赖于libsndfile-1,csound和许多SDL2库。 Libsndfile和csound是静态链接的,SDL2是动态链接的。在我的项目文件夹中,我的SDL2 DLL位于\ GUI \ bin中。
尝试在代码块之外运行.exe时...如果我将DLL放在与项目文件夹(即\ GUI \ bin)中的.exe相同的相对文件路径的文件夹中,我收到一条错误消息,告诉我它无法找到SDL2 DLL
如果我将DLL放在与.exe相同的文件夹中,我会收到以下消息:
程序入口点 _ZNSt7__cxx1112basic_stringlcst11char_traitslcSt11char_traitslcESalcEE10_M_replaceEjjPKcj 无法位于动态链接库中 C:\ Users \ Peter \ Documents \ SDLGUIApp \ bin \ Release \ SDL GUI.exe
我做了一些研究,我很难找到与我的情况相关的信息。看到它下降了"无法找到DLL""当我将它们移动到与.exe相同的文件夹时出现错误消息,然后我猜测它是否在同一个文件夹中找到它们,并且这个错误是由其他东西引起的,或者它们对它们的移动更不满意在'正确的'中使用相同的文件夹。地点。无论哪种方式,我都难过!
非常感谢任何帮助!
皮特
编辑:
我发现的一些消息来源表明,我链接到库的顺序可能会导致类似(但不完全相同)的错误。我试过把它们拖到一边,但我没有试过让它变得更好。以下是我的链接方式:
在其他链接器选项中:
-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:\程序 文件\库\ libsndfile32 \ lib中\ libsndfile-1.lib"
我不确定-s的含义,或者为什么它提到-lmingw32两次。
编辑:
抱歉,进一步编辑...我已经阅读过如何在没有主要功能或者在codeblocks构建选项中选择了错误的构建类型时出现类似错误(通常是Console或GUI应用程序之间的区别)在类型选项下设置)。我试过探索这些想法,但我肯定有一个" int main()"函数,main.cpp包含在调试和发布版本中,我有"控制台应用程序"选择作为调试和发布的构建类型,据我所知,错误不是因为其中任何一个。
答案 0 :(得分:1)
我不认为问题是" dll not found"。相反,我认为没有找到""功能名称"。
具体来说,如果您使用" C"进行编码,您希望链接到" myFunc()"等功能名称。
如果您使用C ++进行编码,则需要预期" mangled names"喜欢" _ZNSt7__cxx1112basic_stringlcst11char_traitslcSt11char_traitslcESalcEE10_M_replaceEjjPKcj"。
换句话说,我认为你可能无意中编译了一些C函数,就好像它们是C ++一样,并且链接器正在寻找"错位名称"而不是"实际名称"。
SUGGESTIONS:
一个。看看你是否认识到" _ZNSt7__cxx1112basic_stringlcst11char_traitslcSt11char_traitslcESalcEE10_M_replaceEjjPKcj"作为你可能写的函数。如果是这样,请确保它有一个" .cpp" (C ++)扩展;并确保在链接命令中包含目标文件(.o或.obj)。
湾否则,请确保#include <xyz>
您正在进行的每个外部通话的相应标题(.h)文件。
℃。失败一切,写一个简单的'#hello world&#34; 5行SDL2程序验证您是否可以成功编译,链接和执行。
d。如果&#34;你好世界&#34;失败,用以下内容更新您的帖子:
1. "hello world" source
2. "hello world" compile/link command
3. Exact error message
这些链接也可能有所帮助: