Russian Qt Forum
Апреля 20, 2025, 14:02 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

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

Страниц: [1] 2 3   Вниз
  Печать  
Автор Тема: [РЕШЕНО, но так себе] Грузит не ту DLL  (Прочитано 17369 раз)
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

Сообщений: 5877


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


Просмотр профиля 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

Сообщений: 5877


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


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

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

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

Сообщений: 5877


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


Просмотр профиля 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

Сообщений: 5877


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


Просмотр профиля 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

Сообщений: 5877


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


Просмотр профиля 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

Сообщений: 5877


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


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

DLLHell
Записан

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


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