6

有一个小问题。我有 c++ 代码,它链接到一些库。我以前有源代码中的(原始)exe,并且可以在第一台机器上完美运行。还有第二台机器,我在其中处理源代码,更改它等。在第二台机器上,该源代码的构建工作正常,当我复制 second.exe 并尝试在第一台机器上运行它时它显示错误消息

“程序入口点_ZNSt8_detail15_List_node_base7_M_hookEPS0_不能位于动态链接库libstdc++-6.dll中。”

有一件事,second.exe 与 original.exe 复制在同一个文件夹中,所以它应该看到 ddl,因为原始 dll 与 original.exe 在同一个文件夹中,不是吗?它是用 MinGW 编译的,在 NetBeans 和项目属性中工作,有库添加(通过添加库文件)但 libstdc++-6.dll 没有添加。libstdc++-6.dll 位于 original.exe 所在的文件夹中

谢谢

4

1 回答 1

9

我在 XP 中使用 MingW 时遇到了非常相似的问题。

我使用 mingW 编译了一个 12 klines C++ 项目;它在 MSYS 中运行良好,但在本地 cmd shell 中调用时失败,声称在 libstdc++-6.dll 中缺少入口点 Z_St8_detail15_and_so_on。

相反,下面的简单程序同时在 MSYS 和 cmd 中运行:

#include <iostream>

using namespace std ;

class Hello {
  public:
  Hello() { cout << "Hello !" << endl ; }
} ;

Hello hello ;

int main (void) {}

它必须针对 libstdc++ (gcc -o hello hello.cpp -lstdc++) 进行编译,如果省略 -lstdc++,编译当然会失败。因此,名称修改可能不是唯一的问题。

我在资源管理器中搜索了 libstdc++-6.dll,发现我的系统上有两个:一个安装在 migw32 中,另一个之前由拥有自己的 lib 版本的程序安装在其目录中。但是,它修改了 PATH 以便首先找到它的库!

我在当前 shell 的 PATH 开头插入了 Mingw 所在的路径。喜欢:

set PATH=C:\mingw\bin;D:\msys\1.0\local\bin;%PATH%

现在一切正常!


马丁,我不能写你的评论,所以我编辑我的信息:你是对的。此处解释了 windows 如何查找 DLL:

http://msdn.microsoft.com/en-en/library/7d83bc18%28v=vs.80%29.aspx

干杯

于 2012-11-21T16:49:32.970 回答