Форум программистов, компьютерный форум CyberForum.ru

Динамические библиотеки - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 18, средняя оценка - 4.83
bullet0070
2 / 2 / 0
Регистрация: 27.10.2013
Сообщений: 54
29.10.2013, 15:48     Динамические библиотеки #1
Доброго времени суток, программисты!

Я создал эту тему, потому что проблема с запуском своих программ на другом компьютере стоит очень остро. В интернете я не нашёл ресурса, который полностью как можно более полно объяснит решение проблемы. Этой темой я хочу поставить точку в этом вопросе. Приступим.

Где появляется проблема?

Проблема появляется потому, что у человека, которому вы скидываете ваше приложение, нету нужных библиотек. Решений проблемы есть несколько:
- Использовать в своём приложении статическую линковку(статические библиотеки).Для этого в свойствах проекта - Link - надо указать /MT (Multi-Threaded). Однако, такое решение проблемы возможно далеко не всегда, более того, не всегда помогает.
- Прикрепить к своему приложению необходимые для её выполнения DLL (Dynamic Link Library). Это файлы динамический библиотеки и они имеют расширение .dll.Этим способом мы и воспользуемся, потому что в моём случае я использую приложение с использованием Windows Forms. Соответственно, это проект CLR. А проекты CLR не совместимы с статической линковкой(/MT).

1)Для начала нам нужно определиться, какая разрятность Windows нашего друга, которому надо скинуть приложение.

2)Допустим, он сказал, что у него Windows 7 x32. Запомнили, мы ему отсылаем наше приложение .exe. Его он может кинуть куда угодно.

3)Следующий шаг - это скинуть ему нужный .dll. Мы выяснили, что при запуске нашего приложение оно пишет ошибку: Запуск программы невозможен так как на компьютере отсутствует MSVCR110.dll.
Примечание: если ошибка ругается на недостающий MSVCR110D.dll, то это значит что вы закомпилировали программу в Debug. Скомпилируйте её в Release. Определить нежный dll можно установив в виртуальной машине (Virtual Box) винду, в которой вы можете делать кучу эскпериментов, где программа запустится, при каких условиях, какую пишет ошибку, какой файл требует и т.д.

4)Путём тестов, мы определились с нужным .dll. Далее нужно найти этот самый файл. Заходим в папку с Visual Studio, далее в VC\redist\ далее смотрим на разрядонсть системы нашего друга. В моём случае, повторяю, это 32 бита. Значит заходим в папку х86. Если же у него 64 бита - заходим в папку х64. Как только зашли в папку, соответствующей разрядности его системы, заходим в папку Microsoft.VC110.CRT. Название папки может меняться всвязи с версией студии. Внутри этой папки и находится заветный msvcr110.dll. Передаём этот файл другу.

5)Следующий шаг - это настраивание этой DLL. Наш друг должен кинуть этот .dll по этому пути: C:\Windows\System32. Как только он его туда кинул, ему нужно "активировать" этот dll. Как раз по причине того, что люди это забывают, и выскакивае ошибка типа Файл MSVCR110.dll либо не предназначен для выполнения под управлением windows, либо.... Чтобы это исправить, надо нажать Пуск, в поисковике вписать regsvr32 название файла. В моём случае человек должен вписать regsvr32 MSVCR110.dll.

6)Вот и всё, наше приложение легко запускается на другом компьютере.

Несколько советов

Для упрощения жизни вашего друга, можно сделать для своей программы инсталятор, чтобы он автоматически кидал файл DLL в папку System32. Инсталятор можно очень лгко сделать с помощью программы Smart Install Maker. ПОЖАЛУЙСТА, КОММЕНТИРУЙТЕ ЭТУ ТЕМУ, ПОЛУЧИЛОСЬ ЛИ У ВАС, ИЛИ ЧТО НЕ ПОЛУЧИЛОСЬ! МНЕ ЭТО ОЧЕНЬ ВАЖНО!.

Уважаемые модераторы! Если я разместил тему не в том месте, прошу простить! И ещё, если сочтёте нужным, тему можно закрепить! Уверен, поможет многим новичкам, и не только!
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Rivory
146 / 112 / 2
Регистрация: 15.01.2013
Сообщений: 266
29.10.2013, 15:53     Динамические библиотеки #2
А можно просто в настройках линкера убрать галочку Link with dynamic RTL. Или я что-то упускаю в этой жизни?
0x10
2425 / 1597 / 232
Регистрация: 24.11.2012
Сообщений: 3,919
29.10.2013, 15:53     Динамические библиотеки #3
Цитата Сообщение от bullet0070 Посмотреть сообщение
Наш друг должен кинуть этот .dll по этому пути: C:\Windows\System32
Эм... Т.е. автор настаивает на том, что пользователь должен обладать правами админа?
bullet0070
2 / 2 / 0
Регистрация: 27.10.2013
Сообщений: 54
29.10.2013, 15:55  [ТС]     Динамические библиотеки #4
Цитата Сообщение от 0x10 Посмотреть сообщение
Эм... Т.е. автор настаивает на том, чтобы пользователь обладал правами админа?
Ну, если у Вас есть другой способ заставить динамические библиотеки работать, можете описать =) Я описал всё так, как сработало у меня)
metaluga145
243 / 244 / 20
Регистрация: 08.04.2013
Сообщений: 927
29.10.2013, 15:59     Динамические библиотеки #5
чет мне подсказывает, что вы как-то странно это делали, потому что я вдруг подумал про разные игры и тд и тп, там тысячи разных библиотек и устанавливаются они без прав админа. или я чего-то не понимаю
Avazart
 Аватар для Avazart
6901 / 5141 / 252
Регистрация: 10.12.2010
Сообщений: 22,604
Записей в блоге: 17
29.10.2013, 16:18     Динамические библиотеки #6
Собрать DLL можно с помощь Proc Mononitor или Poc Explorer как делалось для Qt тут Qt5 Перенос приложения на другой компьютер

ЛоЖить в систеные папки не есть хорошо ...
Собирайте DLL ложите в папку с exe вашей программы.
bullet0070
2 / 2 / 0
Регистрация: 27.10.2013
Сообщений: 54
29.10.2013, 16:39  [ТС]     Динамические библиотеки #7
Цитата Сообщение от Avazart Посмотреть сообщение
Собрать DLL можно с помощь Proc Mononitor или Poc Explorer как делалось для Qt тут Qt5 Перенос приложения на другой компьютер

ЛоЖить в систеные папки не есть хорошо ...
Собирайте DLL ложите в папку с exe вашей программы.
Я пытался положить. Угу, выскачило "Это файл либо не предназначен под управлением...."
Дело в том, что я пытался всё это сделать, что сейчас в коментариях пишут. Но никто ни разу не объяснил как это делается. Все только дают совет, но не объяснение моих действий. Сделал эту тему не для закоренелых опытных программистов, а для тех, кто недавно вместе с С++, для таких как я)
Если у вас есть решение проблемы, которое не требует вмешательства в системные папки, пожалуйста, опишите их тут, разложите по полочкам, объясните каждый шаг) Я не говорю конечно, что моё решение самое крутое.

Добавлено через 2 минуты
Цитата Сообщение от metaluga145 Посмотреть сообщение
чет мне подсказывает, что вы как-то странно это делали, потому что я вдруг подумал про разные игры и тд и тп, там тысячи разных библиотек и устанавливаются они без прав админа. или я чего-то не понимаю
Вы знаете, как сделать так? Если да, пожалуйста, опишите) Можно ведь много просто сказать о недостатках этого способа, и я их прекрасно понимаю. Но иного, правильного решения, я нигде не нашёл. Как же быть новичкам? В сети не нашёл ни одной темы, где бы это всё описывалось. Я находил про консольные приложения, но консольное приложение это уже совсем другая история)

Добавлено через 6 минут
Цитата Сообщение от Avazart Посмотреть сообщение
Собрать DLL можно с помощь Proc Mononitor или Poc Explorer как делалось для Qt тут Qt5 Перенос приложения на другой компьютер

ЛоЖить в систеные папки не есть хорошо ...
Собирайте DLL ложите в папку с exe вашей программы.
К сожалению, QT не каждый пользуется. Visual Studio всё-таки подавляющее большинство. Опять же, первое, что новички делают в VS после консольного приложения - переходят поучиться и набраться опыта в Windows Forms. А как ему быть? Никак не может дать похвастаться друзьям) А ведь приложение на Windows Forms это особая ситуация, когда про статическую линковку ни слова в интернете, а про динамическую полторы строчки)
Avazart
 Аватар для Avazart
6901 / 5141 / 252
Регистрация: 10.12.2010
Сообщений: 22,604
Записей в блоге: 17
29.10.2013, 16:44     Динамические библиотеки #8
Цитата Сообщение от bullet0070 Посмотреть сообщение
Visual Studio всё-таки подавляющее большинство.
Я не пользуюсь VC++ точнее сказать не пользуюсь C++/CLR, я использую С++Builder или Qt

Что касается Windows Forms, то если я не ошибаюсь там по другому нужно проверять "среду"
bullet0070
2 / 2 / 0
Регистрация: 27.10.2013
Сообщений: 54
29.10.2013, 16:51  [ТС]     Динамические библиотеки #9
Цитата Сообщение от Avazart Посмотреть сообщение
Я не пользуюсь VC++ точнее сказать не пользуюсь C++/CLR, я использую С++Builder или Qt

Что касается Windows Forms, то если я не ошибаюсь там по другому нужно проверять "среду"
Вы - опытный программист) Вы знаете в чём писать программы, Вы знаете как их писать. новичок обладает несколько другими свойствами) Для qt надо обладать опытом. Тему я ведь выложил не в "С++ для программистов со стажем 25 лет, опытом работы в miscrosoft 10 лет минимум, знание С++, C#, Java на 100 процентов + минимум 5 медалей в мировых соревнованиях", а в теме "для новичков" =)

Добавлено через 1 минуту
Вобщем я понял свою главную ошибку, надо было сверху написать не "программисты", а "начинающие программисты"

Если там нужно "по-другому" проверять среду, то, объясните новичкам как это делается. Уже много чего мне сказали по поводу минусов этого способа, но ещё никто не написал подобного урока в VS, используя Windows Forms) Пожалуйста, создайте кто-нибудь тему с этим уроком, я обязательно посмотрю и исправлю свои ошибка. Пока что это - единственный для меня вариант, дургого просто не знаю
0x10
29.10.2013, 16:54
  #10

Не по теме:

Цитата Сообщение от bullet0070 Посмотреть сообщение
Вобщем я понял свою главную ошибку, надо было сверху написать не "программисты", а "начинающие программисты"
Хм... Т.е. давать грамотные рекомендации - не вариант?

PS Сам за неимением винды не могу поэкспериментировать и сказать как лучше.

bullet0070
2 / 2 / 0
Регистрация: 27.10.2013
Сообщений: 54
29.10.2013, 16:57  [ТС]     Динамические библиотеки #11
Цитата Сообщение от 0x10 Посмотреть сообщение

Не по теме:


Хм... Т.е. давать грамотные рекомендации - не вариант?

PS Сам за неимением винды не могу поэкспериментировать и сказать как лучше.

Это как раз вариант, но только каждый шаг нужно объяснять. Я посмотрел много статей в msdn, не понял ничего) Там говорят грамотно для грамотных. А для незнаек это просто тьма)
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.04.2015, 08:54     Динамические библиотеки
Еще ссылки по теме:

Вызов функции одной динамической библиотеки из другой динамической библиотеки C++
Динамические (или не динамические.) переменные! C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Игорь Тетеркин
0 / 0 / 1
Регистрация: 01.03.2015
Сообщений: 30
16.04.2015, 08:54     Динамические библиотеки #12
Для упрощения жизни вашего друга, можно сделать для своей программы инсталятор, чтобы он автоматически кидал файл DLL в папку System32. Инсталятор можно очень легко сделать с помощью программы Smart Install Maker. - Так как это сделать?
Yandex
Объявления
16.04.2015, 08:54     Динамические библиотеки
Ответ Создать тему
Опции темы

Текущее время: 02:16. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru