|
|
|
alexx83 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 17 Регистрация: 29.3.2010 Репутация: нет Всего: 1 |
Имеем windows + mingw. Есть dll, путь к которой не должен добавляться в PATH. Есть программа которую нужно слинковать с этой dll. Библиотека будет находиться относительно программы как показано на диаграмме:
ORIGIN |- bin | \-program.exe |- opt | |-lib | | \-mylib.dll Есть ли возможность слинковать программу чтобы она сама искала необходимую dll по относительному пути? Я пробовал вариант с передачей в LDFLAGS параметров Wl,-rpath,'../opt/lib' -L/path/to/lib -lmylib Но скомпилированная программа не ищет по относительному пути. |
|||
|
||||
kosmonaFFFt |
|
|||
Опытный Профиль Группа: Участник Сообщений: 538 Регистрация: 14.4.2008 Где: Иннополис Репутация: нет Всего: 5 |
В голову пришел только вариант с динамической подгрузкой через LoadLibrary в программе, без явной линковки программы с dll...
-------------------- |
|||
|
||||
boostcoder |
|
|||
pattern`щик Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 2 Всего: 110 |
похоже, '-Wl,-rpath' в мингв не правильно работает. или же это особенность вендус...
спроси лучше в списке рассылки mingw, к примеру. они-то точно знают. |
|||
|
||||
bems |
|
|||
Эксперт Профиль Группа: Комодератор Сообщений: 3400 Регистрация: 5.1.2006 Репутация: нет Всего: 88 |
а что, в секции импорта РЕ-файла допустимо что-то кроме имени экспортирующего модуля? насколько я понимаю как бы линкер не хотел указать расположение дллки, но если он хочет создать корректный модуль, то ему придется записать туда только имя
-------------------- Обижено школьников: 8 |
|||
|
||||
leniviy |
|
||||||
Опытный Профиль Группа: Участник Сообщений: 552 Регистрация: 8.2.2003 Где: Спб Репутация: нет Всего: 5 |
Аналог rpath под виндой - манифест.
Например, wget.exe из порта unix utils зависит от libeay32.dll . Но мы не хотим класть libeay32.dll в %Path%, чтобы не было dll hell. Для этого надо убрать из .exe файла встроенный манифест и написать свой. расположение файлов:
wget.exe.manifest:
SomeDlls/SomeDlls.manifest:
|
||||||
|
|||||||
boostcoder |
|
|||
pattern`щик Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 2 Всего: 110 |
это как? и это как? |
|||
|
||||
leniviy |
|
||||
Опытный Профиль Группа: Участник Сообщений: 552 Регистрация: 8.2.2003 Где: Спб Репутация: нет Всего: 5 |
не труЪ. В cygwin и mingw dll файлы традиционно кладут в bin/ Добавлено через 3 минуты и 21 секунду
1) Если .exe файл запакован upx - распаковать 2) Открыть в редакторе ресурсов, например, visual studio, и удалить.
пример выше |
||||
|
|||||
leniviy |
|
|||
Опытный Профиль Группа: Участник Сообщений: 552 Регистрация: 8.2.2003 Где: Спб Репутация: нет Всего: 5 |
upd: чтобы винда искала манифест не в текущей директории, надо правильно обозвать этот ассембли:
bin/program.exe.manifest: <assemblyIdentity type='win32' name='..\opt\lib\lib' ... opt/lib/lib.manifest: <assemblyIdentity type="win32" name='..\opt\lib\lib' обратите внимание, что имена совпадают. Проверил на win7 Добавлено @ 12:24 upd2: при тестировании надо всё время переименовывать папку, так как винда кэширует фейлы. Это сообщение отредактировал(а) leniviy - 8.11.2012, 13:09 |
|||
|
||||
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | GNU toolchain | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |