Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.72/18: Рейтинг темы: голосов - 18, средняя оценка - 4.72
2 / 2 / 1
Регистрация: 27.10.2013
Сообщений: 80

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

29.10.2013, 15:48. Показов 3745. Ответов 11
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго времени суток, программисты!

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

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

Проблема появляется потому, что у человека, которому вы скидываете ваше приложение, нету нужных библиотек. Решений проблемы есть несколько:
- Использовать в своём приложении статическую линковку(статические библиотеки).Для этого в свойствах проекта - 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. ПОЖАЛУЙСТА, КОММЕНТИРУЙТЕ ЭТУ ТЕМУ, ПОЛУЧИЛОСЬ ЛИ У ВАС, ИЛИ ЧТО НЕ ПОЛУЧИЛОСЬ! МНЕ ЭТО ОЧЕНЬ ВАЖНО!.

Уважаемые модераторы! Если я разместил тему не в том месте, прошу простить! И ещё, если сочтёте нужным, тему можно закрепить! Уверен, поможет многим новичкам, и не только!
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
29.10.2013, 15:48
Ответы с готовыми решениями:

Статические и динамические библиотеки
Здравствуйте! Возник вопрос в понимании задания, подскажите пожалуйста То есть в библиотеке должна динамически выделяться память под...

Динамические библиотеки в отдельной папке
Добрый день! Имеется некий проект, использующий библиотеки, допустим, 1dll.a, 2dll.a и 3dll.a, с которыми вместе динамически...

Линковка, статические, динамические библиотеки - матчасть
Парился сегодня целый день, компиля cUrl c MinGW с поддержкой https - т.е. с OpenSSL и zlib. Долго мучался, ив процессе понял, что имею...

11
148 / 114 / 21
Регистрация: 15.01.2013
Сообщений: 266
29.10.2013, 15:53
А можно просто в настройках линкера убрать галочку Link with dynamic RTL. Или я что-то упускаю в этой жизни?
0
3258 / 2060 / 351
Регистрация: 24.11.2012
Сообщений: 4,909
29.10.2013, 15:53
Цитата Сообщение от bullet0070 Посмотреть сообщение
Наш друг должен кинуть этот .dll по этому пути: C:\Windows\System32
Эм... Т.е. автор настаивает на том, что пользователь должен обладать правами админа?
0
2 / 2 / 1
Регистрация: 27.10.2013
Сообщений: 80
29.10.2013, 15:55  [ТС]
Цитата Сообщение от 0x10 Посмотреть сообщение
Эм... Т.е. автор настаивает на том, чтобы пользователь обладал правами админа?
Ну, если у Вас есть другой способ заставить динамические библиотеки работать, можете описать =) Я описал всё так, как сработало у меня)
0
245 / 246 / 38
Регистрация: 08.04.2013
Сообщений: 927
29.10.2013, 15:59
чет мне подсказывает, что вы как-то странно это делали, потому что я вдруг подумал про разные игры и тд и тп, там тысячи разных библиотек и устанавливаются они без прав админа. или я чего-то не понимаю
0
Эксперт С++
 Аватар для Avazart
8488 / 6155 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
29.10.2013, 16:18
Собрать DLL можно с помощь Proc Mononitor или Poc Explorer как делалось для Qt тут Qt5 Перенос приложения на другой компьютер

ЛоЖить в систеные папки не есть хорошо ...
Собирайте DLL ложите в папку с exe вашей программы.
0
2 / 2 / 1
Регистрация: 27.10.2013
Сообщений: 80
29.10.2013, 16:39  [ТС]
Цитата Сообщение от 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 это особая ситуация, когда про статическую линковку ни слова в интернете, а про динамическую полторы строчки)
0
Эксперт С++
 Аватар для Avazart
8488 / 6155 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
29.10.2013, 16:44
Цитата Сообщение от bullet0070 Посмотреть сообщение
Visual Studio всё-таки подавляющее большинство.
Я не пользуюсь VC++ точнее сказать не пользуюсь C++/CLR, я использую С++Builder или Qt

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

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

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

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

Не по теме:

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

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

0
2 / 2 / 1
Регистрация: 27.10.2013
Сообщений: 80
29.10.2013, 16:57  [ТС]
Цитата Сообщение от 0x10 Посмотреть сообщение

Не по теме:


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

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

Это как раз вариант, но только каждый шаг нужно объяснять. Я посмотрел много статей в msdn, не понял ничего) Там говорят грамотно для грамотных. А для незнаек это просто тьма)
0
0 / 0 / 0
Регистрация: 01.03.2015
Сообщений: 30
16.04.2015, 08:54
Для упрощения жизни вашего друга, можно сделать для своей программы инсталятор, чтобы он автоматически кидал файл DLL в папку System32. Инсталятор можно очень легко сделать с помощью программы Smart Install Maker. - Так как это сделать?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
16.04.2015, 08:54
Помогаю со студенческими работами здесь

Компиляция, линковка, статические и динамические библиотеки
Доброго вам времени суток. Обращаюсь к вам со списком близких по теме вопросов. Если вам не сложно, хотя бы напишите URL или книгу, где об...

Динамические (или не динамические.) переменные!
УважаемыЕ! Есть вопрос. Вот код программы (ТЗ метод северо-западного угла) - под спойлером. А вот ее маленький кусок,задача которого в том,...

про библиотеки в VS C++ (какие библиотеки нужны для функций 'cout' и 'cin')
какие библиотеки нужны для функций 'cout' и 'cin' ???

Как включить библиотеки в исполняемый файл, чтобы не приходилось ставить библиотеки (Eclipse)
Как включить библиотеки в конечный EXE как это сделано в bilder, чтобы не приходилось ставить библиотеки.

Вызов функции одной динамической библиотеки из другой динамической библиотеки
Добрый день! Помогите пожалуйста разобраться со следующим вопросом. Возможно ли из одной библиотеки передать параметры для...


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

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru