| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > GNU toolchain > Runtime relative link with dll |
| Автор: alexx83 26.10.2012, 10:28 |
| Имеем 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 26.10.2012, 10:36 |
| В голову пришел только вариант с динамической подгрузкой через LoadLibrary в программе, без явной линковки программы с dll... |
| Автор: boostcoder 26.10.2012, 17:00 |
| похоже, '-Wl,-rpath' в мингв не правильно работает. или же это особенность вендус... спроси лучше в списке рассылки mingw, к примеру. они-то точно знают. |
| Автор: bems 3.11.2012, 05:40 |
| а что, в секции импорта РЕ-файла допустимо что-то кроме имени экспортирующего модуля? насколько я понимаю как бы линкер не хотел указать расположение дллки, но если он хочет создать корректный модуль, то ему придется записать туда только имя |
| Автор: leniviy 8.11.2012, 12:02 | ||||||
| Аналог rpath под виндой - манифест. Например, wget.exe из порта unix utils зависит от libeay32.dll . Но мы не хотим класть libeay32.dll в %Path%, чтобы не было dll hell. Для этого надо убрать из .exe файла встроенный манифест и написать свой. расположение файлов:
wget.exe.manifest:
SomeDlls/SomeDlls.manifest:
|
| Автор: boostcoder 8.11.2012, 12:03 |
это как? и это как? |
| Автор: leniviy 8.11.2012, 12:23 |
| 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: при тестировании надо всё время переименовывать папку, так как винда кэширует фейлы. |