gpt4 book ai didi

c++ - "The procedure entry point.... could not be located"错误

转载 作者:行者123 更新时间:2023-11-28 06:01:10 25 4
gpt4 key购买 nike

我一直在设置我的应用程序以在 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 放在同一个文件夹中,我会收到以下消息:

The procedure entry point _ZNSt7__cxx1112basic_stringlcst11char_traitslcSt11char_traitslcESalcEE10_M_replaceEjjPKcj could not be located in the dynamic link library 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 Files\Libraries\libsndfile32\lib\libsndfile-1.lib

查看 codeblock 的构建日志表明它首先链接“其他链接器选项”。我假设是这样,因为构建日志的最后部分之一是这样说的:

-lmingw32 -lSDL2main -lSDL2 -lSDL2_image -lSDL2_mixer -lSDL2_ttf -s -mwindows -lmingw32 "C:\Program Files\Libraries\Csound6\bin\csound64.lib" "C:\Program Files\Libraries\libsndfile32\lib\libsndfile-1.lib"

我不确定 -s 是什么意思,或者它为什么两次提到 -lmingw32。

编辑:

抱歉,进一步编辑...我已经读到类似的错误是如何因没有主要功能或在代码块构建选项中选择了错误的构建类型而发生的(通常是控制台或 GUI 应用程序之间的区别在类型选项下设置)。我已经尝试探索这些想法,但我肯定有一个“int main()”函数,main.cpp 包含在调试和发布版本中,并且我选择“控制台应用程序”作为调试和发布的构建类型,据我所知,错误不是因为其中任何一个。

最佳答案

  1. 我认为问题不是“找不到 dll”。相反,我认为它是“找不到函数名称”。

  2. 具体来说,如果您使用“C”编写代码,您会希望链接到诸如“myFunc()”之类的函数名称。

    如果您使用 C++ 编写代码,您会期望“mangled names”,例如“_ZNSt7__cxx1112basic_stringlcst11char_traitslcSt11char_traitslcESalcEE10_M_replaceEjjPKcj”。

  3. 换句话说,我认为您可能无意中将某些 C 函数编译成 C++,并且链接器正在寻找“损坏的名称”而不是“实际名称”。

建议:

一个。查看您是否将“_ZNSt7__cxx1112basic_stringlcst11char_traitslcSt11char_traitslcESalcEE10_M_replaceEjjPKcj”识别为您可能编写的函数。如果是这样,请确保它具有“.cpp”(C++)扩展名;并确保您在链接命令中包含目标文件(.o 或 .obj)。

否则,请确保您 #include <xyz>为您正在进行的每个 外部调用提供适当的 header (.h) 文件。

一切都失败了,编写一个简单的“hello world”5 行 SDL2 程序来验证您是否可以成功编译、链接和执行。

如果“hello world”失败,请更新您的帖子:

1. "hello world" source
2. "hello world" compile/link command
3. Exact error message

这些链接也可能有帮助:

关于c++ - "The procedure entry point.... could not be located"错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33265375/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com