"程序入口点....无法定位"错误

时间:2015-10-21 17:13:36

标签: c++ windows dll runtime-error

我一直在设置我的应用程序在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包含在调试和发布版本中,我有"控制台应用程序"选择作为调试和发布的构建类型,据我所知,错误不是因为其中任何一个。

1 个答案:

答案 0 :(得分:1)

  1. 我不认为问题是" dll not found"。相反,我认为没有找到""功能名称"。

  2. 具体来说,如果您使用" C"进行编码,您希望链接到" myFunc()"等功能名称。

    如果您使用C ++进行编码,则需要预期&​​#34; mangled names"喜欢" _ZNSt7__cxx1112basic_stringlcst11char_traitslcSt11char_traitslcESalcEE10_M_replaceEjjPKcj"。

  3. 换句话说,我认为你可能无意中编译了一些C函数,就好像它们是C ++一样,并且链接器正在寻找"错位名称"而不是"实际名称"。

  4. 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
    

    这些链接也可能有所帮助: