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

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

Войти
Регистрация
Восстановить пароль
 
WeDZminxxx
2 / 2 / 1
Регистрация: 18.04.2014
Сообщений: 26
#1

Перенос приложения на другие компьютеры - статическая линковка - C++

20.08.2014, 15:46. Просмотров 1105. Ответов 11
Метки нет (Все метки)

Здравствуйте. Похожие вопросы звучали уже на этом форуме и на других, но я не смог найти подходящего и рабочего варианта в моем случае. Я работаю в Visual Studio 2012, ось - 64х битная семерка, проект использует библиотеку opencv(246)(dll). В процессе работы потребовалась переносимость приложения, т.е. что бы каждый на своем компе мог запуститься. Поиск по сети и форумам отправил в свойсва к "C/C++->Code Generation->Runtime Library", исправление на "/MT" не помогло, так же что-то говорилось про файлы манифестов(дикая инструкция) - аналогично, попытался еще полазить по свойствам - без успехов. Теперь сам вопрос - можно ли каким-либо способом воткнуть все dll в exe? Если да, то каким?
Как я понял runtime отвечает только за внутренние библиотеки VS, а манифесты задают связки компонет всего проекта, это так? Многие так же утверждают что dll в принципе не встраивается - где-нибудь мануалы для таких вопросов? И наверное последний вопрос по теме - статическая линковка и статическая компиляция одно и то же?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.08.2014, 15:46
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Перенос приложения на другие компьютеры - статическая линковка (C++):

Статическая линковка - C++
Добрый вечер. Прочитал что бы екзешка запускалась на любом компьютере нужно сделать статическую линковку. То есть прикрепить к екзешнику...

Статическая линковка - C++
Появилась необходимость прилинковать статическую библиотеку (GLFW) к проекту на C++. Я подключил заголовки, а вот саму библиотеку...

Статическая линковка MinGW - C++
Как задать статическую линковку для MinGW в среде Qt Creator? Прописал в pro- файле:, но не помогло.

Статическая линковка boost - C++
Hi all! Захотелось побаловаться бустом, и столкнулся с проблемой, что в пакете boost-libs отсутствуют *.а файлы. Сначала я хотел...

Статическая линковка библиотек в Code::Blocks - C++
Люди добрые, подскажите пожалуйста как выполнить статическую линковку библиотек в Code::Blocks (16.01).

Статическая и динамическая линковка - в чем преимущество каждой? - C++
Помогите разобраться со статической и динамической линковкой. Я правильно понял, что статическая линковка упаковывает все либы в екзешник и...

11
Убежденный
Системный программист
Эксперт С++
15637 / 7147 / 1131
Регистрация: 02.05.2013
Сообщений: 11,586
Записей в блоге: 1
Завершенные тесты: 1
20.08.2014, 20:28 #2
Цитата Сообщение от WeDZminxxx Посмотреть сообщение
Поиск по сети и форумам отправил в свойсва к "C/C++->Code Generation->Runtime Library", исправление на "/MT" не помогло
Мне нравится такое описание проблемы: "не помогло".
Что конкретно случилось при использовании /MT ?

Цитата Сообщение от WeDZminxxx Посмотреть сообщение
Теперь сам вопрос - можно ли каким-либо способом воткнуть все dll в exe?
Нет. Да это и не нужно в большинстве случаев.

Цитата Сообщение от WeDZminxxx Посмотреть сообщение
Как я понял runtime отвечает только за внутренние библиотеки VS, а манифесты задают связки компонет всего проекта, это так?
Runtime - это очень широкое понятие.
Кстати, VS2010 и выше вообще не используют манифесты для
установки связи с библиотеками Visual C++.
Так что распостранять эти dll-ки можно простым копированием, положив в
одну папку вместе с exe.

Цитата Сообщение от WeDZminxxx Посмотреть сообщение
где-нибудь мануалы для таких вопросов?
Понимаете, каждая программа - это как отдельный "мирок".
Есть общие рекомендации, но всегда нужно смотреть конкретно, какие
сторонние библиотеки используются, какие ключи компилятора и т.д.

Цитата Сообщение от WeDZminxxx Посмотреть сообщение
статическая линковка и статическая компиляция одно и то же?
Термина "статическая компиляция" я не встречал до сегодняшнего дня ни разу...
1
Andrej
И целого heap'а мало
94 / 55 / 9
Регистрация: 31.07.2014
Сообщений: 291
20.08.2014, 20:50 #3
Я б на вашем месте заморочился на инсталяторе, чтоб всё файло распихивал в правильные места (даже простой .bat-ник сойдёт). Один раз сделать и не думать.

Не по теме:

слава пакетным манагерам!11 yum-нь

0
-NEURON-
Заблокирован
20.08.2014, 20:57 #4
Во - первых ты прав на счёт /MT, компилятор засунет библиотеки VS redisr в EXE. Во - вторых, если ты используешь
Цитата Сообщение от WeDZminxxx Посмотреть сообщение
проект использует библиотеку opencv(246)(dll)
, то чтоб у тебя EXE не требовал DLL этой библиотеки, тебе её саму надо статический линкануть ну и подключить статический к коду, а это возможно только при наличие исходников на OpenCV, интересно, сможешь их достать? А статический линкануть? Обычно для подобных библиотек это на столько геморойный процесс... да ещё и занимает часа 4.
0
NeonLost
Пес войны
75 / 86 / 3
Регистрация: 23.02.2012
Сообщений: 653
20.08.2014, 21:46 #5
Цитата Сообщение от WeDZminxxx Посмотреть сообщение
Здравствуйте. Похожие вопросы звучали уже на этом форуме и на других, но я не смог найти подходящего и рабочего варианта в моем случае. Я работаю в Visual Studio 2012, ось - 64х битная семерка, проект использует библиотеку opencv(246)(dll). В процессе работы потребовалась переносимость приложения, т.е. что бы каждый на своем компе мог запуститься. Поиск по сети и форумам отправил в свойсва к "C/C++->Code Generation->Runtime Library", исправление на "/MT" не помогло, так же что-то говорилось про файлы манифестов(дикая инструкция) - аналогично, попытался еще полазить по свойствам - без успехов. Теперь сам вопрос - можно ли каким-либо способом воткнуть все dll в exe? Если да, то каким?
Как я понял runtime отвечает только за внутренние библиотеки VS, а манифесты задают связки компонет всего проекта, это так? Многие так же утверждают что dll в принципе не встраивается - где-нибудь мануалы для таких вопросов? И наверное последний вопрос по теме - статическая линковка и статическая компиляция одно и то же?
еще можно виртуализировать приложение...тогда ему вообще ничего не надо будет, никаких библиотек ни дотнета, ничего...)
0
-NEURON-
Заблокирован
20.08.2014, 22:41 #6
Цитата Сообщение от NeonLost Посмотреть сообщение
еще можно виртуализировать приложение...
чаго ?
0
NeonLost
Пес войны
75 / 86 / 3
Регистрация: 23.02.2012
Сообщений: 653
20.08.2014, 23:34 #7
Цитата Сообщение от -NEURON- Посмотреть сообщение
чаго ?
ну эта тулза по виртуализации Xenocode Virtual Application Studio например может все ддлки засунуть в exe + может дотнет любой версии туда же запихать...получается один файл, который внутри себя разворачивает систему со своим реестром дотнетом и прочей лабудой...чего смешного я сказал я хз...)
0
WeDZminxxx
2 / 2 / 1
Регистрация: 18.04.2014
Сообщений: 26
20.08.2014, 23:36  [ТС] #8
Цитата Сообщение от Убежденный Посмотреть сообщение
Мне нравится такое описание проблемы: "не помогло".
Что конкретно случилось при использовании /MT ?
Ничего не случилось, я изначально предполагал, что он подцепит opencv dll, а как уже сказали
Цитата Сообщение от -NEURON- Посмотреть сообщение
Во - первых ты прав на счёт /MT, компилятор засунет библиотеки VS redisr в EXE.
получается изначально был не прав, заполняю пробелы в знаниях)
На самом деле просто не хотелось таскать с собой dll, но если уж ничего не поможет, придется.
С bat получается что все равно все dll с собой, просто он может их раскидать куда надо?
Цитата Сообщение от -NEURON- Посмотреть сообщение
только при наличие исходников на OpenCV, интересно, сможешь их достать? А статический линкануть?
Я на самом деле использую самый минимум (из видео вытащить кадр, а потом пройтись по пикселям в структуре Mat). На сколько мне известно, эти функции открытые, так что исходники можно будет достать, ну а потом собрать cpp и lib со статикой тоже думаю смогу. Но здесь вопрос времени и моей правоты по поводу открытости.
В процессе поиска нашел статейку http://habrahabr.ru/post/126089/ . С помощью ILMerge и Post Build Event в Visual Studio можно ли будет решить мою проблему?
Цитата Сообщение от NeonLost Посмотреть сообщение
можно виртуализировать приложение
ссылку на маны можно? Впервые слышу.
0
NeonLost
Пес войны
75 / 86 / 3
Регистрация: 23.02.2012
Сообщений: 653
20.08.2014, 23:44 #9
Цитата Сообщение от WeDZminxxx Посмотреть сообщение
ссылку на маны можно? Впервые слышу
http://spoon.net/studio/resources
реал все просто, указываешь приложение + длл и получается портабл версия приложения...там есть how to на сайте
0
gray_fox
What a waste!
1521 / 1226 / 70
Регистрация: 21.04.2012
Сообщений: 2,565
Завершенные тесты: 3
21.08.2014, 01:08 #10
Цитата Сообщение от -NEURON- Посмотреть сообщение
это возможно только при наличие исходников на OpenCV, интересно, сможешь их достать?
Код opencv находится в открытом доступе, так что достать их несложно)
0
Lynatik001
38 / 32 / 4
Регистрация: 28.09.2012
Сообщений: 620
21.08.2014, 03:13 #11
Чет тут почитал и ужаснулся)
Ведь пишу маленькую 2д игру на SFML Box2d + пару там каких то еще библиотек. И как мне добавить их что бы они работали и на другом компе)
типа включить в настройках использование статических библиотек?) - ну включил куча ошибок что дальше
0
WeDZminxxx
2 / 2 / 1
Регистрация: 18.04.2014
Сообщений: 26
21.08.2014, 08:00  [ТС] #12
Цитата Сообщение от gray_fox Посмотреть сообщение
Код opencv находится в открытом доступе, так что достать их несложно)
Не весь, некоторые алгоритмы (пример surf/sift) в этой библиотеке закрыты.
1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.08.2014, 08:00
Привет! Вот еще темы с ответами:

Одномерный массив, перенос в другие массивы - C++
И опять же, помогите, не успеваю сделать своими силами.

Написать программу, которая будет запускать другие приложения по выбору пользователя - C++
нужно составить программу, которая будет вызывать другие 5 программ и по требованию запускать одну из них. как запустить одну программу я...

Перенос приложения под IOS - C++
Добрый день всем, подскажите,пожалуйста с решением проблемы: есть консольное приложение с исходным кодом на VC++ 2010, как перенести его на...

Перенос БД на другие компьютеры - C#
Здравствуйте. Такая проблема : дома пишу бд на шарпе с скл сервера, а сдавать надо в универе. Дома все работает нормально, но...


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

Или воспользуйтесь поиском по форуму:
12
Yandex
Объявления
21.08.2014, 08:00
Ответ Создать тему
Опции темы

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