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

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

29.10.2013, 15:48. Показов 3707. Ответов 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
8484 / 6151 / 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
8484 / 6151 / 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
Ответ Создать тему
Новые блоги и статьи
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru