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

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

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

Линковка проекта. C++
Статическая линковка C++
C++ Правильная линковка библиотек
C++ Статическая линковка boost
C++ Статическая линковка
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Убежденный
Системный программист
 Аватар для Убежденный
14194 / 6209 / 985
Регистрация: 02.05.2013
Сообщений: 10,346
Завершенные тесты: 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 Посмотреть сообщение
статическая линковка и статическая компиляция одно и то же?
Термина "статическая компиляция" я не встречал до сегодняшнего дня ни разу...
Andrej
И целого heap'а мало
 Аватар для Andrej
93 / 54 / 9
Регистрация: 31.07.2014
Сообщений: 293
20.08.2014, 20:50     Перенос приложения на другие компьютеры - статическая линковка #3
Я б на вашем месте заморочился на инсталяторе, чтоб всё файло распихивал в правильные места (даже простой .bat-ник сойдёт). Один раз сделать и не думать.

Не по теме:

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

-NEURON-
Заблокирован
20.08.2014, 20:57     Перенос приложения на другие компьютеры - статическая линковка #4
Во - первых ты прав на счёт /MT, компилятор засунет библиотеки VS redisr в EXE. Во - вторых, если ты используешь
Цитата Сообщение от WeDZminxxx Посмотреть сообщение
проект использует библиотеку opencv(246)(dll)
, то чтоб у тебя EXE не требовал DLL этой библиотеки, тебе её саму надо статический линкануть ну и подключить статический к коду, а это возможно только при наличие исходников на OpenCV, интересно, сможешь их достать? А статический линкануть? Обычно для подобных библиотек это на столько геморойный процесс... да ещё и занимает часа 4.
NeonLost
Пес войны
 Аватар для NeonLost
74 / 85 / 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 в принципе не встраивается - где-нибудь мануалы для таких вопросов? И наверное последний вопрос по теме - статическая линковка и статическая компиляция одно и то же?
еще можно виртуализировать приложение...тогда ему вообще ничего не надо будет, никаких библиотек ни дотнета, ничего...)
-NEURON-
Заблокирован
20.08.2014, 22:41     Перенос приложения на другие компьютеры - статическая линковка #6
Цитата Сообщение от NeonLost Посмотреть сообщение
еще можно виртуализировать приложение...
чаго ?
NeonLost
Пес войны
 Аватар для NeonLost
74 / 85 / 3
Регистрация: 23.02.2012
Сообщений: 653
20.08.2014, 23:34     Перенос приложения на другие компьютеры - статическая линковка #7
Цитата Сообщение от -NEURON- Посмотреть сообщение
чаго ?
ну эта тулза по виртуализации Xenocode Virtual Application Studio например может все ддлки засунуть в exe + может дотнет любой версии туда же запихать...получается один файл, который внутри себя разворачивает систему со своим реестром дотнетом и прочей лабудой...чего смешного я сказал я хз...)
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 Посмотреть сообщение
можно виртуализировать приложение
ссылку на маны можно? Впервые слышу.
NeonLost
Пес войны
 Аватар для NeonLost
74 / 85 / 3
Регистрация: 23.02.2012
Сообщений: 653
20.08.2014, 23:44     Перенос приложения на другие компьютеры - статическая линковка #9
Цитата Сообщение от WeDZminxxx Посмотреть сообщение
ссылку на маны можно? Впервые слышу
http://spoon.net/studio/resources
реал все просто, указываешь приложение + длл и получается портабл версия приложения...там есть how to на сайте
gray_fox
What a waste!
 Аватар для gray_fox
1244 / 1127 / 53
Регистрация: 21.04.2012
Сообщений: 2,350
Завершенные тесты: 3
21.08.2014, 01:08     Перенос приложения на другие компьютеры - статическая линковка #10
Цитата Сообщение от -NEURON- Посмотреть сообщение
это возможно только при наличие исходников на OpenCV, интересно, сможешь их достать?
Код opencv находится в открытом доступе, так что достать их несложно)
Lynatik001
 Аватар для Lynatik001
34 / 28 / 2
Регистрация: 28.09.2012
Сообщений: 560
21.08.2014, 03:13     Перенос приложения на другие компьютеры - статическая линковка #11
Чет тут почитал и ужаснулся)
Ведь пишу маленькую 2д игру на SFML Box2d + пару там каких то еще библиотек. И как мне добавить их что бы они работали и на другом компе)
типа включить в настройках использование статических библиотек?) - ну включил куча ошибок что дальше
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.08.2014, 08:00     Перенос приложения на другие компьютеры - статическая линковка
Еще ссылки по теме:

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

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

Или воспользуйтесь поиском по форуму:
WeDZminxxx
2 / 2 / 1
Регистрация: 18.04.2014
Сообщений: 26
21.08.2014, 08:00  [ТС]     Перенос приложения на другие компьютеры - статическая линковка #12
Цитата Сообщение от gray_fox Посмотреть сообщение
Код opencv находится в открытом доступе, так что достать их несложно)
Не весь, некоторые алгоритмы (пример surf/sift) в этой библиотеке закрыты.
Yandex
Объявления
21.08.2014, 08:00     Перенос приложения на другие компьютеры - статическая линковка
Ответ Создать тему
Опции темы

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