Russian Qt Forum
Июнь 16, 2024, 23:20 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1] 2 3   Вниз
  Печать  
Автор Тема: [РЕШЕНО, но так себе] Грузит не ту DLL  (Прочитано 16265 раз)
Torvald
Самовар
**
Offline Offline

Сообщений: 119


Просмотр профиля
« : Декабрь 12, 2016, 14:07 »

Здравствуйте, возникла проблема:
на пользовательском компьютере "где-то" установлена библиотека libstdc++-6.dll, мое приложение грузит эту библиотеку и выдает ошибку "не найдена точка входа __gxx_personality_v0 ...".
Вероятно эта библиотека собрана другой версией MinGW.
В каталоге моего приложения уже есть все необходимые библиотеки (в тч libstdc++-6.dll), но оно почему то выбирает именно ту "неправильную", не из каталога приложения а извне.

Вопрос: как сказать приложению использовать библиотеку, которая лежит в том же каталоге?

Пробовал так, не помогает:
Код
C++ (Qt)
QStringList paths = QApplication::libraryPaths();
paths.append(".");
paths.append("platforms");
paths.append("imageformats");
paths.append(dllDir.absolutePath());
paths.append(dllDir.absolutePath() + "/platforms");
paths.append(dllDir.absolutePath() + "/imageformats");
QApplication::setLibraryPaths(paths);
« Последнее редактирование: Декабрь 14, 2016, 17:05 от Torvald » Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #1 : Декабрь 12, 2016, 14:09 »

Так точно не получится. На сколько я помню, только менять переменную PATH перед запуском, типа set PATH=.;%PATH%
Пусть виндузятники меня поправят, если я не прав.
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
Bepec
Гость
« Ответ #2 : Декабрь 12, 2016, 14:36 »

Сначала ищется рядом с исполняемым файлом, потом в патче, потом в системных директориях.
Если у вас это происходит, значит нету этой длл рядом с exe.
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #3 : Декабрь 12, 2016, 14:40 »

Сначала ищется рядом с исполняемым файлом, потом в патче, потом в системных директориях.
Если у вас это происходит, значит нету этой длл рядом с exe.
Are you sure?
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #4 : Декабрь 12, 2016, 14:43 »

Таки да. Проверь рабочий каталог запуска.

Цитировать
If SafeDllSearchMode is enabled, the search order is as follows:
The directory from which the application loaded.
The system directory. Use the GetSystemDirectory function to get the path of this directory.
The 16-bit system directory. There is no function that obtains the path of this directory, but it is searched.
The Windows directory. Use the GetWindowsDirectory function to get the path of this directory.
The current directory.
The directories that are listed in the PATH environment variable. Note that this does not include the per-application path specified by the App Paths registry key. The App Paths key is not used when computing the DLL search path.
If SafeDllSearchMode is disabled, the search order is as follows:
The directory from which the application loaded.
The current directory.
The system directory. Use the GetSystemDirectory function to get the path of this directory.
The 16-bit system directory. There is no function that obtains the path of this directory, but it is searched.
The Windows directory. Use the GetWindowsDirectory function to get the path of this directory.
The directories that are listed in the PATH environment variable. Note that this does not include the per-application path specified by the App Paths registry key. The App Paths key is not used when computing the DLL search path.
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #5 : Декабрь 12, 2016, 14:55 »

Сначала ищется рядом с исполняемым файлом,
На неубогом Вындоуз - да, но есть и др ОС
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #6 : Декабрь 12, 2016, 14:55 »

Сначала ищется рядом с исполняемым файлом,
На неубогом Вындоуз - да, но есть и др ОС
Вопрос был конкретно про Вындоус.
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
Torvald
Самовар
**
Offline Offline

Сообщений: 119


Просмотр профиля
« Ответ #7 : Декабрь 12, 2016, 15:03 »

Если длл нет, то так и пишет - не найдена длл. Пробовал удалить libstdc++-6.dll из каталога приложения - ошибка не изменилась, все так же не находит точку входа __gxx_personality_v0.
Что интересно, собрал тестовое ехе приложение - все работает.
А вот в подгружаемой библиотеке - нет.
На самом деле это delphi проект, который грузить dll написанную на Qt, и вот при загрузке этой длл возникает эта ошибка. Пробовал обнулять переменные среды - никакого эффекта. Пробовал повысить версию MinGW - ошибка изменилась (теперь другую точку входа найти не может).
« Последнее редактирование: Декабрь 12, 2016, 15:07 от Torvald » Записан
Torvald
Самовар
**
Offline Offline

Сообщений: 119


Просмотр профиля
« Ответ #8 : Декабрь 12, 2016, 15:07 »

Таки да. Проверь рабочий каталог запуска.
Проверил - совпадает с каталогом запуска ехе и длл.

Попытался скомпилить с флагами -static-libgcc и -static-libstdc++, длл выросла, но ошибка не исчезла

И вообще эта ошибка на чистой системе не проявляется. Только вот на этом компьютере (Win7 32bit)
« Последнее редактирование: Декабрь 12, 2016, 15:09 от Torvald » Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #9 : Декабрь 12, 2016, 15:25 »

На самом деле это delphi проект, который грузить dll написанную на Qt, и вот при загрузке этой длл возникает эта ошибка.
Так может просто в exe зашит путь загрузки? (weak/delayed dll)
Записан
Torvald
Самовар
**
Offline Offline

Сообщений: 119


Просмотр профиля
« Ответ #10 : Декабрь 12, 2016, 15:33 »

На самом деле это delphi проект, который грузить dll написанную на Qt, и вот при загрузке этой длл возникает эта ошибка.
Так может просто в exe зашит путь загрузки? (weak/delayed dll)
Это я проверить не могу. Даже если это так, то как в этом случае загрузить длл? Почему на других компьютерах все работает?
« Последнее редактирование: Декабрь 12, 2016, 15:37 от Torvald » Записан
kuzulis
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2812


Просмотр профиля
« Ответ #11 : Декабрь 12, 2016, 19:32 »

Цитировать
На самом деле это delphi проект, который грузить dll написанную на Qt, и вот при загрузке этой длл возникает эта ошибка.

Эмм... а разве так можно? Откуда дельфи знает про Qt?  Шокированный
Или имеется ввиду, что dll-ка написана в QtCreator без использования Qt-шных классов?
Записан

ArchLinux x86_64 / Win10 64 bit
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #12 : Декабрь 12, 2016, 20:04 »

Цитировать
На самом деле это delphi проект, который грузить dll написанную на Qt, и вот при загрузке этой длл возникает эта ошибка.

Эмм... а разве так можно? Откуда дельфи знает про Qt?  Шокированный
Или имеется ввиду, что dll-ка написана в QtCreator без использования Qt-шных классов?
А Кьют выдает какие-то нестандартные dll?
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
Bepec
Гость
« Ответ #13 : Декабрь 12, 2016, 20:07 »

конфликт дллок скорее всего.
Если приложение использует длл с тем же названием,но другой версии/компилятора, то при неявной подгрзке dll будет подсунута не та, которая рядом с Dll, а та, что загружена приложением.
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #14 : Декабрь 12, 2016, 20:10 »

DLLHell
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
Страниц: [1] 2 3   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.069 секунд. Запросов: 22.