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

Как сделать приложение универсальным - C++

Восстановить пароль Регистрация
 
Devotion
 Аватар для Devotion
23 / 21 / 2
Регистрация: 25.12.2011
Сообщений: 59
08.09.2012, 00:38     Как сделать приложение универсальным #1
Возник такой вопрос: я написал простую программу на с++ (у меня Win 7, IDE - VS 2010), перенес ее на другой компьютер с другой ОС (Win XP), попробовал запустить и получил ошибки "Невозможно запустить, не найдена такая-то dll". Насколько мне известно, с++ транслирует код непосредственно на машинный язык. Как можно создать приложение, которое будет работать на любой машине, независимо от наличия в системе каких-либо библиотек и независимо собственно от того, какая система, и возможно ли это вообще?

Если что-то написал неправильно, поправьте, только начинаю знакомиться с С++)
За понятные объяснения буду очень благодарен.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.09.2012, 00:38     Как сделать приложение универсальным
Посмотрите здесь:

C++ Как из проекта .dll сделать консольное приложение?
C++ не меняя эту часть кода(она должна остаться точь-в-точь как выше) сделать так, чтоб запускаемое приложение выводило на экран "hello world!"
C++ консольное приложение (при запуске приложение открывалось на весь экран)
C++ как сделать цикл, чтобы после моего действия, которое делает программа, она предлагала мне сделать его еще раз?
Как сделать отдельные записи в таблице по строкам, чтобы сделать запросы? C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
defer
秘密
 Аватар для defer
555 / 235 / 3
Регистрация: 29.11.2010
Сообщений: 783
08.09.2012, 00:46     Как сделать приложение универсальным #2
свойствах проекта в разделе «C/C++ -> Code Generation» нужно свойство «Runtime Library» выставить в «Multi-threaded (/MT)»
OhMyGodSoLong
~ Эврика! ~
 Аватар для OhMyGodSoLong
1234 / 983 / 42
Регистрация: 24.07.2012
Сообщений: 2,002
08.09.2012, 00:46     Как сделать приложение универсальным #3
Можно. Таская с собой все эти библиотеки, если не хочется их писать руками. Либо берёте сразу библиотеки с собой в виде *.dll рядом с программой, либо линкуете их статически, тогда они будут сразу внутри программы (понятия не имею, как это делается в Студии, но 99%, что можно).

Так решается проблема отсутствия библиотек.

К сожалению, рантайм-библиотеки разных систем не особо дружат между собой, так что придётся перекомпилировать код под разные системы отдельно. Насчёт прикладных: google://кроссплатформенные библиотеки
defer
秘密
 Аватар для defer
555 / 235 / 3
Регистрация: 29.11.2010
Сообщений: 783
08.09.2012, 00:51     Как сделать приложение универсальным #4
Цитата Сообщение от ~OhMyGodSoLong~ Посмотреть сообщение
К сожалению, рантайм-библиотеки разных систем не особо дружат между собой, так что придётся перекомпилировать код под разные системы отдельно.
Это вы о чем?
outoftime
║XLR8║
 Аватар для outoftime
505 / 427 / 33
Регистрация: 25.07.2009
Сообщений: 2,297
08.09.2012, 00:52     Как сделать приложение универсальным #5
В VS C# можно либами расширять исполняемый файл (в линковке есть поле какое-то), это вопрос о либе.

По поводу оси: винда и никсы требуют отдельной компиляции, для мак оси еще инсталер делают отдельно, для винды можно компилить 1 раз если в настройках компиляции поставить поддержку и х86 и amd64.

Это так, для понимания, за деталями к оф доке.
OhMyGodSoLong
~ Эврика! ~
 Аватар для OhMyGodSoLong
1234 / 983 / 42
Регистрация: 24.07.2012
Сообщений: 2,002
08.09.2012, 00:58     Как сделать приложение универсальным #6
Цитата Сообщение от defer Посмотреть сообщение
Это вы о чем?
Есть такая штука как рантайм. Это та библиотека, где лежат все определения всяких strlen, new, delete и т. п. Она различная у разных ОС со своими внутренними прибамбахами у каждой. Компилятор их удачно скрывает, но когда делается попытка перенести объектный файл на другую систему, эта абстракция начинает течь. Я уж молчу, что формат исполнимых файлов разный и линкуются к библиотекам они по-разному.
Devotion
 Аватар для Devotion
23 / 21 / 2
Регистрация: 25.12.2011
Сообщений: 59
08.09.2012, 01:16  [ТС]     Как сделать приложение универсальным #7
Цитата Сообщение от outoftime Посмотреть сообщение
В VS C# можно либами расширять исполняемый файл (в линковке есть поле какое-то), это вопрос о либе.
Ну в С# это делать особого смысла нет, т.к. приложения на нем пишутся исключительно под Виндос и просто не работают без платформы .NET.

Я правильно понял, что если я скомпилю программу под Виндос со статическими библиотеками (т.е. нужные методы будут внутри экзешника), то он будет работать на любой Винде (7, ХР), но не будет работать на других ОС?
Invader_Zim
Twilight Parasite
 Аватар для Invader_Zim
153 / 149 / 2
Регистрация: 21.07.2011
Сообщений: 907
08.09.2012, 01:18     Как сделать приложение универсальным #8
Devotion, именно! под линукс надо или под линуксом компилить, или кросс компиляторы юзать
defer
秘密
 Аватар для defer
555 / 235 / 3
Регистрация: 29.11.2010
Сообщений: 783
08.09.2012, 01:20     Как сделать приложение универсальным #9
Цитата Сообщение от Devotion Посмотреть сообщение
Я правильно понял, что если я скомпилю программу под Виндос со статическими библиотеками (т.е. нужные методы будут внутри экзешника), то он будет работать на любой Винде (7, ХР), но не будет работать на других ОС?
вот эта часть
если я скомпилю программу под Виндос со статическими библиотеками (т.е. нужные методы будут внутри экзешника), то он будет работать на любой Винде (7, ХР)
правильная

насчет других ОС, это отдельный разговор
Invader_Zim
Twilight Parasite
 Аватар для Invader_Zim
153 / 149 / 2
Регистрация: 21.07.2011
Сообщений: 907
08.09.2012, 01:23     Как сделать приложение универсальным #10
defer, если эта часть, то будет работать и на более ранних(вероятно). Главное чтоб все либы были статиком. И чтоб без всяких тих бгмерзких дотнетов
Devotion
 Аватар для Devotion
23 / 21 / 2
Регистрация: 25.12.2011
Сообщений: 59
08.09.2012, 01:41  [ТС]     Как сделать приложение универсальным #11
Всем спасибо за помощь, решение во 2м посте
Цитата Сообщение от defer Посмотреть сообщение
свойствах проекта в разделе «C/C++ -> Code Generation» нужно свойство «Runtime Library» выставить в «Multi-threaded (/MT)»
Последний вопрос. Таким образом в программу вставляется полностью вся библиотека или только описание тех методов, которые используются в программе?
outoftime
║XLR8║
 Аватар для outoftime
505 / 427 / 33
Регистрация: 25.07.2009
Сообщений: 2,297
08.09.2012, 14:23     Как сделать приложение универсальным #12
Цитата Сообщение от Devotion Посмотреть сообщение
Ну в С# это делать особого смысла нет, т.к. приложения на нем пишутся исключительно под Виндос и просто не работают без платформы .NET.
А я то думал что закрою эту тему....

http://www.mono-project.com/Main_Page больше ничего не скажу
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.09.2012, 17:25     Как сделать приложение универсальным
Еще ссылки по теме:

Сделать приложение с указателем массива C++
Какое консольное mini-приложение можно сделать с использованием классов (для практики)? C++
C++ Вычисление функции - сделать многофайловое приложение

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

Или воспользуйтесь поиском по форуму:
Devotion
 Аватар для Devotion
23 / 21 / 2
Регистрация: 25.12.2011
Сообщений: 59
08.09.2012, 17:25  [ТС]     Как сделать приложение универсальным #13
Цитата Сообщение от outoftime Посмотреть сообщение
А я то думал что закрою эту тему....
http://www.mono-project.com/Main_Page больше ничего не скажу
Про Mono я знаю, просто речь шла о VS и С# в чистом виде, т.е. под .NET
Yandex
Объявления
08.09.2012, 17:25     Как сделать приложение универсальным
Ответ Создать тему
Опции темы

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