точка входа в процедуру _ZNSt8_detail15_List_node_base7_M_hookEPS0_ не может быть расположена в библиотеке динамической компоновки libstdc -6.dll.

есть небольшая проблема. У меня есть код С++, он связан с некоторыми библиотеками. У меня есть ранее (оригинальный) exe из исходного кода, и он отлично работает на первой машине. И есть вторая машина, где я работаю над исходным кодом, изменяю его и т. д. На второй машине сборка этого исходного кода работает нормально, но когда я копирую второй .exe и пытаюсь запустить его на первой машине он отображает сообщение об ошибке

«точка входа в процедуру _ZNSt8_detail15_List_node_base7_M_hookEPS0_ не может быть расположена в библиотеке динамической компоновки libstdc++-6.dll».

Во-первых, во-вторых. exe копируется в ту же папку, что и original.exe, поэтому он должен видеть ddl, потому что оригинальная dll находится в той же папке, что и original.exe, не так ли? Он скомпилирован с помощью MinGW, работает в NetBeans и в свойствах проекта, есть добавление библиотек (через файл добавления библиотеки), но libstdc++-6.dll туда не добавляется. libstdc++-6.dll находится в папке, где находится original.exe

Спасибо


person Ell    schedule 13.11.2012    source источник
comment
Я не знаю, как переносимые библиотеки, экспортирующие искаженные имена, но ответ что-то вроде не очень, особенно если DLL собиралась одним компилятором, а потребляющий код — другим. Если вы смешиваете и сопоставляете двоичные файлы таким образом, у вас могут возникнуть проблемы.   -  person Rook    schedule 13.11.2012
comment
TY, было простое несоответствие, что на первой машине была в mingw/bin/ более новая версия этой DLL, после замены ее на ту, что с машины компиляции, она работает отлично... поэтому я предполагаю, что сначала она ищет DLL в path a только после этого в том же каталоге, что и run.exe, не так ли?   -  person Ell    schedule 22.11.2012


Ответы (1)


У меня была очень похожая проблема с использованием MingW внутри XP.

Я скомпилировал проект C++ из 12 клайнов, используя mingW; Он отлично работает в MSYS, но сбой при вызове в собственной оболочке cmd, утверждая, что точка входа Z_St8_detail15_and_so_on отсутствует внутри libstdc++-6.dll.

И наоборот, следующая простая программа выполнялась как в 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, а другая была установлена ​​ранее программой, которая содержала собственную версию библиотеки. в его каталогах. Но он изменил PATH так, чтобы его библиотека была найдена первой!

Я вставил путь, где Mingw стоял в начале PATH внутри текущей оболочки. Что-то вроде:

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

Ваше здоровье

person autret    schedule 21.11.2012