связывание DLL в c ++ программу QTCreator - PullRequest
0 голосов
/ 12 мая 2011

Я немного новичок в этой концепции и у меня возникли некоторые проблемы с загрузкой библиотек во время выполнения.На машине для разработки, которую я использую, библиотеки загружаются правильно, и программа всегда будет работать правильно, но когда я скомпилирую эту программу и перенесу ее на другой компьютер с необходимыми DLL, они не смогут загрузиться.Я думаю, что основная причина, по которой это происходит, заключается в том, что не загружаемая DLL находится в какой-то папке в системе (например, C: \ windows \ system32), которой нет на большинстве других компьютеров.

Мой вопрос: если я предоставлю пользовательскую DLL с необходимой функциональностью и поставлю ее вместе с программой, как я могу заставить ее правильно связываться в QTCreator?Я пробовал комбинацию флагов -l и -L (например, -llibname -LC: \ path \ to \, где \ dll \ будет \), но, похоже, это тоже не сработало.Другая удивительная вещь (для меня в любом случае) заключается в том, что, хотя для запуска программы потребуется DLL, она все равно успешно запускает другие компьютеры.

Если у кого-нибудь есть какие-либо советы или руководства, которые я могу прочитать по этому поводу, я был бы очень признателен.

1 Ответ

0 голосов
/ 12 мая 2011

Во-первых, вы должны прочитать , как Windows находит DLL , чтобы загрузить их.

Во-вторых, как только вы узнаете, как работает этот процесс, вы можете рассмотреть возможность доставки ваших DLL сприложение, поэтому проблемы исчезают при запуске на других машинах.Вам следует убедиться, что у вас есть права на это, если они являются сторонними DLL-библиотеками.

В-третьих, Средство обхода зависимостей Windows действительно отлично подходит для диагностики проблем загрузки DLL во время выполнения.Просто загрузите .exe в него и нажмите F7, чтобы начать профилирование.Он покажет вам все библиотеки DLL, загруженные вашим приложением, и откуда.

Наконец, я не знаю QTCreator, но я хотел бы представить, что все, что вам нужно сделать, это передать ему файл .lib с правильным переключателем(и эта ссылка предполагает, что -L является правильным переключателем, FWIW).

...