2009-12-05 2 views
4

Я пытаюсь передать некоторый старый код MSVC C++ в MinGW/GCC.MinGW/GCC Задержка Загруженный эквивалент DLL?

Одна из проблем заключается в том, что проект в значительной степени зависит от параметра/DELAYLOAD для функций, которые не всегда используются, и где надлежащая dll находится во время выполнения.

Есть ли такой вариант на MinGW/GCC?

Этот код предназначен для платформы Windows.

ответ

6

На эльфийских целей (для Unix-подобных систем) вы можете указать опцию -z lazy (которая по умолчанию по умолчанию) с ld (компоновщик, который также использует MinGW).

Насколько я знаю, целевая точка PE i386 (для Windows) не имеет, имеет явный вариант ссылки. Я не могу найти документацию о его доступности.

+0

Это самое неудачное. Мне придется придумать какое-то обходное решение. Спасибо вам за помощь! –

+0

Я не думаю, что это правильный ответ. '-z lazy' позволяет отсроченное разрешение символа, но общая библиотека всегда загружается. '/ DELAYLOAD' включает задержку связывания, то есть задерживает загрузку библиотеки до тех пор, пока не вызывается одна из ее функций (у Solaris есть эта функция, но она не попала в Glibc, потому что Drepper^W^W по какой-то причине). – yugr

3

И я бы добавил, что хотя DLL с задержкой загрузки являются частью ОС Windows, они фактически реализованы с точки зрения небольших заглушек, сгенерированных компоновщиком. По крайней мере, это имело место. Таким образом, на уровне ОС Windows формального понятия «загрузка задержки» не существует. Существует соглашение, основанное на двоичном коде, испускаемом компоновщиком.

+0

Не совсем специфичные для Windows, другие операционные системы реализуют задержку загрузки одинаково. – yugr

+1

Теперь, начиная с WIndows 10. См. 'QueryOptionalDelayLoadedAPI' – MSalters