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

С++ для начинающих

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

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

29.10.2013, 15:48. Просмотров 2332. Ответов 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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.10.2013, 15:48
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Динамические библиотеки (C++):

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

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

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

OpenCV CLR статичные и динамические библиотеки в Visual Studio - C++
Доброго времени суток, проблема такая: собрал OpenCV со статичными библиотеками, чтобы иметь возможность запускать на других компьютерах....

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

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

11
Rivory
146 / 112 / 2
Регистрация: 15.01.2013
Сообщений: 266
29.10.2013, 15:53 #2
А можно просто в настройках линкера убрать галочку Link with dynamic RTL. Или я что-то упускаю в этой жизни?
0
0x10
2474 / 1647 / 247
Регистрация: 24.11.2012
Сообщений: 4,068
29.10.2013, 15:53 #3
Цитата Сообщение от bullet0070 Посмотреть сообщение
Наш друг должен кинуть этот .dll по этому пути: C:\Windows\System32
Эм... Т.е. автор настаивает на том, что пользователь должен обладать правами админа?
0
bullet0070
2 / 2 / 0
Регистрация: 27.10.2013
Сообщений: 57
29.10.2013, 15:55  [ТС] #4
Цитата Сообщение от 0x10 Посмотреть сообщение
Эм... Т.е. автор настаивает на том, чтобы пользователь обладал правами админа?
Ну, если у Вас есть другой способ заставить динамические библиотеки работать, можете описать =) Я описал всё так, как сработало у меня)
0
metaluga145
243 / 244 / 20
Регистрация: 08.04.2013
Сообщений: 927
29.10.2013, 15:59 #5
чет мне подсказывает, что вы как-то странно это делали, потому что я вдруг подумал про разные игры и тд и тп, там тысячи разных библиотек и устанавливаются они без прав админа. или я чего-то не понимаю
0
Avazart
Нарушитель
Эксперт С++
7226 / 5398 / 291
Регистрация: 10.12.2010
Сообщений: 23,935
Записей в блоге: 17
29.10.2013, 16:18 #6
Собрать DLL можно с помощь Proc Mononitor или Poc Explorer как делалось для Qt тут Qt5 Перенос приложения на другой компьютер

ЛоЖить в систеные папки не есть хорошо ...
Собирайте DLL ложите в папку с exe вашей программы.
0
bullet0070
2 / 2 / 0
Регистрация: 27.10.2013
Сообщений: 57
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 это особая ситуация, когда про статическую линковку ни слова в интернете, а про динамическую полторы строчки)
0
Avazart
Нарушитель
Эксперт С++
7226 / 5398 / 291
Регистрация: 10.12.2010
Сообщений: 23,935
Записей в блоге: 17
29.10.2013, 16:44 #8
Цитата Сообщение от bullet0070 Посмотреть сообщение
Visual Studio всё-таки подавляющее большинство.
Я не пользуюсь VC++ точнее сказать не пользуюсь C++/CLR, я использую С++Builder или Qt

Что касается Windows Forms, то если я не ошибаюсь там по другому нужно проверять "среду"
0
bullet0070
2 / 2 / 0
Регистрация: 27.10.2013
Сообщений: 57
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) Пожалуйста, создайте кто-нибудь тему с этим уроком, я обязательно посмотрю и исправлю свои ошибка. Пока что это - единственный для меня вариант, дургого просто не знаю
0
0x10
29.10.2013, 16:54
  #10

Не по теме:

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

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

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

Не по теме:


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

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

Это как раз вариант, но только каждый шаг нужно объяснять. Я посмотрел много статей в msdn, не понял ничего) Там говорят грамотно для грамотных. А для незнаек это просто тьма)
0
Игорь Тетеркин
0 / 0 / 1
Регистрация: 01.03.2015
Сообщений: 30
16.04.2015, 08:54 #12
Для упрощения жизни вашего друга, можно сделать для своей программы инсталятор, чтобы он автоматически кидал файл DLL в папку System32. Инсталятор можно очень легко сделать с помощью программы Smart Install Maker. - Так как это сделать?
0
16.04.2015, 08:54
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.04.2015, 08:54
Привет! Вот еще темы с ответами:

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

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

Динамические массивы и функции. Динамические массивы. - C++
Дана матрица 6х8 целого типа. Создать одномерный массив, содержащий элементы матрицы, кратные числу, введенному с клавиатуры.

Динамические Массивы - C++
Выручайте ребята :friends: 1. Сформировать динамический одномерный массив, заполнить его случайными числами и вывести на печать. ...


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

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru