Russian Qt Forum

Компиляторы и платформы => Windows => Тема начата: Igors от Февраль 07, 2011, 17:53



Название: DLL 32/64
Отправлено: Igors от Февраль 07, 2011, 17:53
Добрый день

Есть 2 файла dll с тем же именем, напр theLib.dll, один файл для 32-бит, другой для 64. Хотелось бы сделать так

TheLib (folder)
     32 (folder)
         theLib.dll (file 32)
     64 (folder)
         theLib.dll (file 64)
     
И поместить фолдер TheLib туда же где exe. Но как откомпилить Windows приложение так чтобы оно искало такую-то dll там? Понятно у себя на машине я могу прописать пути (правда не знаю где  :)), но на стороне удаленного заказчика хочется "ограничиться копированием".

Спасибо


Название: Re: DLL 32/64
Отправлено: Пантер от Февраль 07, 2011, 17:56
Запускать через батничек.


Название: Re: DLL 32/64
Отправлено: crackedmind от Февраль 07, 2011, 18:11
Статическое или динамическое связывание?


Название: Re: DLL 32/64
Отправлено: Igors от Февраль 07, 2011, 18:43
Запускать через батничек.
Оба exe файла (32 и 64) должны быть в одном фолдере, поэтому не вижу как батничек поможет.

Статическое или динамическое связывание?
Вероятно под динамическим Вы имели ввиду GetProcAddress и.т.п. Тогда нет, статическое.  Библиотека не моя, исходники под Вындоуз не все, имею lib и dll для 32 и 64 соответственно.


Название: Re: DLL 32/64
Отправлено: pastor от Февраль 07, 2011, 19:09
А зачем заказчику 2 версии библиотеки? Приложение собрано все равно с одной из них


Название: Re: DLL 32/64
Отправлено: Igors от Февраль 07, 2011, 19:13
А зачем заказчику 2 версии библиотеки? Приложение собрано все равно с одной из них
Заказчику нужны 2 версии приложения (т.е 2 exe файла). А они зовут dll с тем же именем


Название: Re: DLL 32/64
Отправлено: pastor от Февраль 07, 2011, 19:16
Приложения тоже находятся в одной папке?


Название: Re: DLL 32/64
Отправлено: Igors от Февраль 07, 2011, 19:18
Приложения тоже находятся в одной папке?
Да, должны по многим причинам


Название: Re: DLL 32/64
Отправлено: pastor от Февраль 07, 2011, 19:22
Как уже сказал Пантер, через батник. Добавить в переменную PATH путь к нужной библиотеке и запустить приложение.


Название: Re: DLL 32/64
Отправлено: Igors от Февраль 07, 2011, 20:38
Как уже сказал Пантер, через батник. Добавить в переменную PATH путь к нужной библиотеке и запустить приложение.
Да уж очень коряво. Приложение (как правило) вызывается из другого - там тоже править на батник? 32-бит модуль вызывает 64 модуль (часто). И с платформами (на Mac этой проблемы нет) вразброс - придется городить уродливый код только для Вындоуз.

Говорят dll могут быть "redirected" из манифеста. Если мелкософт это страхомудие придумал - может удастся из него что-то получить? Гуглю.....


Название: Re: DLL 32/64
Отправлено: Blackwanderer от Февраль 07, 2011, 20:47
Извините, а что, это настолько принципиально, чтобы файлы назывались одинаково?
Ведь можно theLib32.dll и theLib64.dll и проблемы нету.


Название: Re: DLL 32/64
Отправлено: Пантер от Февраль 07, 2011, 20:51
Igors, какое задание, такое и решение. Ты хочешь чего-то странного, поэтому и решение через ****....


Название: Re: DLL 32/64
Отправлено: Igors от Февраль 07, 2011, 21:03
Извините, а что, это настолько принципиально, чтобы файлы назывались одинаково?
Ведь можно theLib32.dll и theLib64.dll и проблемы нету.
Да с удовольствием бы так и сделал, но каким образом? Ведь к проекту подключается lib файл в котором вшито имя theLib.dll - эта dll будет зваться exe файлом.

Igors, какое задание, такое и решение. Ты хочешь чего-то странного, поэтому и решение через ****....
Пантер, не горячитесь. Я проблему не выдумал потому что мне больше делать нечего. Есть Вындоуз платформа, и я ее поддерживать обязан, хочу я того или нет. На родном OSX проблем нет, не моя вина что в Вындоуз все через ****


Название: Re: DLL 32/64
Отправлено: BRE от Февраль 07, 2011, 21:14
Приложения тоже находятся в одной папке?
Да, должны по многим причинам
Не знаю этих причин... Но почему не сделать так?

AppDir
   App.bat             Пускалка запускает нужный exe-шник.

   Share (folder)         Общие данные
   32bit (folder)         32-битный код
      TheLib.dll
      App.exe
   64bit (folder)         64-битный код
      TheLib.dll
      App.exe
      


Название: Re: DLL 32/64
Отправлено: Пантер от Февраль 07, 2011, 21:17
BRE, опередил. :)
Дополню только тем, что App.bat в данном случае не нужен. Просто делается 2 ярлыка.


Название: Re: DLL 32/64
Отправлено: Akon от Февраль 07, 2011, 21:21
переименовать либы: theLib32.dll и theLib64.dll
implib для lib из dll (implib - тулза из состава MSVC).


Название: Re: DLL 32/64
Отправлено: Igors от Февраль 07, 2011, 21:39
Не знаю этих причин... Но почему не сделать так?

AppDir
   App.bat             Пускалка запускает нужный exe-шник.

   Share (folder)         Общие данные
   32bit (folder)         32-битный код
      TheLib.dll
      App.exe
   64bit (folder)         64-битный код
      TheLib.dll
      App.exe
      
Потому что это нормально для Вындоуз, а на Mac этой проблемы нет (universal binary). Держать разные организации файлов под 2 платформы - обойдется недешево


Название: Re: DLL 32/64
Отправлено: BRE от Февраль 07, 2011, 21:42
Держать разные организации файлов под 2 платформы - обойдется недешево
А если еще и linux держать придется, то и третья организация понадобиться.  :)


Название: Re: DLL 32/64
Отправлено: pastor от Февраль 08, 2011, 01:08
А зачем поставлять две версии одного и тоже и это одно и тоже должно еще жить в одной папке? Если у заказчика х86_64 то как помне достаточно одной (любой из 2х) сборки. Если у заказчика платформа х86, то не понятно, зачем ему нужна х86_64 сборка.


Название: Re: DLL 32/64
Отправлено: Igors от Февраль 08, 2011, 01:38
переименовать либы: theLib32.dll и theLib64.dll
implib для lib из dll (implib - тулза из состава MSVC).
Akon, спасибо за конструктивный совет, сейчас изучаю/разбираюсь. когда будут результаты - отпишусь.

А зачем поставлять две версии одного и тоже и это одно и тоже должно еще жить в одной папке? Если у заказчика х86_64 то как помне достаточно одной (любой из 2х) сборки. Если у заказчика платформа х86, то не понятно, зачем ему нужна х86_64 сборка.
Резоны есть. Если напр. у пользователя объемы данных относительно невелики а RAM всего 2-4Gb, то ему прямая выгода использовать 32 битную версию - и памяти жрет меньше и все плагины на месте. А если хочет "до упора" (и имеет железо покруче) - ну тогда 64. Также 64-битной версии (иногда) нужен сервис 32 (не все портировано). Поэтому "разделить" не получится

Edit: обе версии (32/64) прекрасно "живут вместе" на 1 машине (как на OSX так и на WinXP64)


Название: Re: DLL 32/64
Отправлено: Waryable от Февраль 08, 2011, 15:46
Не очень я понял структуру каталогов. Но если расположение ехе-dll регулярно то почему бы не прошить в коде путь относительно QCoreApplication::applicationFilePath. Глубоко в доки не лез, но вроде кросплатформенное.


Название: Re: DLL 32/64
Отправлено: Igors от Февраль 09, 2011, 06:17
После отчаянных но бесплодных попыток понять ну как же работает мелкософтовский манифест разрулил так:

1) Переименовал theLib.dll в theL32.dll и theL64.dll соответственно
2) Зашел hex редактором в lib файлы и поменял везде theLib.dll на theL32.dll (theL64.dll)

Заработало. Понимаю - грубейшее нарушение GPL и все такое. Но не тащить же корову на баню с батниками и.т.п.


Название: Re: DLL 32/64
Отправлено: Пантер от Февраль 09, 2011, 08:15
За тобой уже выехали, суши сухари.


Название: Re: DLL 32/64
Отправлено: Igors от Февраль 09, 2011, 08:40
За тобой уже выехали, суши сухари.
Да я поговорил с авторами dll-ки (нормальные пацаны) так что может как-нибудь обойдется  :)


Название: Re: DLL 32/64
Отправлено: Пантер от Февраль 09, 2011, 08:47
Да пацаны не при чем. Ты гнев Столмана накликал. :)