C++ без Framework

  • Автор темы Автор темы DSDante
  • Дата начала Дата начала
D

DSDante

Простите, если вопрос уже был (вопрос популярный), но ни поиск по форуму, ни вообще в инете мне не помог.
Итак, я написал программу, выдающую "Hello, world!", и хочу откомпилить ее в Visual Studio 2008 так, чтобы она запустилась на компах, где VS отсутствует (как и вообще Framework любой версии).
Большинство ответов на этот вопрос сводится к "а зачем тебе это вообще надо?" и "в висте уже есть фреймворк, лучше сразу привыкай". Но, во-первых, фреймворк есть на 2% компьютеров, которые мне встречались, во-вторых, мне не нравится виста, и в-третьих, моя гордость программиста не успокоится, пока я не решу эту простую, казалось бы, проблему. :)
Еще часто встречаются ответы, что, мол, запускать программу без фреймворка - то же самое, что запускать без операционки. Но ведь тот же самый код, скомпилированный в старом VC прекрасно работал!
 
Гы.
1. Создавай в студии С++ проект Win32 Console Application
2. Вытирай все, кроме #include "stdafx.h"
3. Вставляй код:

Код:
#include <iostream>
using namespace std;

void main()
{
cout<<"Hello world!\n";
getchar();
}
или
Код:
#include <windows.h>

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
MessageBox(NULL, _T("Hello, world!"), _T("Hello world Application"), MB_OK);return 0;
}

3. Компилируй и запускай.

и никакого фреймворка не надо ]:->
А вообще это бред! Windows XP SP3 ставится с .NET Framework 2 - это как минимум, по-моему даже с 3м. Так что это сказки, что только на 5% компов стоит фреймворк. Ты в каком веке живёшь? А если считаешь, что он тебе не нужен, смысл тогда постить в тему .NET? Пиши на чистых С плюсах.
 
Я создавал Empty Project, и вручную писал единственный *.cpp типа
#include <windows.h>

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
MessageBox(NULL, _T("Hello, world!"), _T("Hello world Application"), MB_OK);return 0;
}
Прога весила килобайт эдак семь, но все равно содержала в себе манифест, и требовала фреймворк.

Будете смеяться, но я не знал, что существует WinXP SP3. :) И все равно хочется совместимости хотя бы со старыми сервис паками.
 
Меню Project - <Project Name> Properties - Configuration Properties - Manifest Tool - опцию Embed manifest ставь NO
если не поможет еще меняй Меню Project - <Project Name> Properties - Configuration Properties - Linker - Manifest file - Generate manifest=No
этого по идее должно хватить
 
Уже пробовал. Создается файл *.exe.manifest, без которого прога выдает ошибку, мол, MSVCR90D.dll не найден.
 
DSDante, по моему Вы путаете основополагающие вещи.
Вы пишете на управляемом С++? Если да, то без установки NET Framework не обойтись. Если нет, то все должно работать после корректной настройки приложения.
 
Все то же самое относится к прогам, которые компилировались в Borland C++ (в DOS).

Если нет, то все должно работать после корректной настройки приложения.
Кстати, когда я запускаю прогу с манифестом на компе без фреймворка, выдается ошибка, что программа некорректно настроена. Я три раза облазил все Project Properties, но решения проблемы не нашел.
 
Но, во-первых, фреймворк есть на 2% компьютеров, которые мне встречались
Как определяли и эти 2% из скольки тестируемых?
во-вторых, мне не нравится виста
а чего так, пока самая лучшая десктоповая ось, по крайней мере у микрософта.
и в-третьих, моя гордость программиста не успокоится, пока я не решу эту простую, казалось бы, проблему. :(
плохо вникли в Сообщение #6, я так думаю.
 
DSDante, телепаты все в отпуске. Можете прямо ответить на мой вопрос?
 
Как определяли и эти 2% из скольки тестируемых?
...
а чего так, пока самая лучшая десктоповая ось, по крайней мере у микрософта.
Давайте не будем спорить о вкусах, несовместимость с SP2 - уже достаточная причина разобраться в этом.

плохо вникли в Сообщение #6, я так думаю.
Объясните, пожалуйста. Как я понял, Managed C++ - это расширение синтаксиса C++, которое я никогда не использовал, и которого не было во времена Borland C++. Так что оно ни при чем.
 
Как я понял, Managed C++ - это расширение синтаксиса C++, которое я никогда не использовал, и которого не было во времена Borland C++. Так что оно ни при чем.
Так чего Вы тему в Net засунули, если используете чистый C++?
 
Просто ошибся. Перенесите ее в С++ > VC, если хотите.
 
Извините, я не специально. А проблема, имхо, все же существующая.
 
Давайте не будем спорить о вкусах
А зачем вы начали?
несовместимость с SP2 - уже достаточная причина разобраться в этом.
А это то тут причем? на 2000 винде все работает
Ну да ладно, раз перенесли, значит ушел я.
 
DSDante, не нужно забывать, что любое приложение, даже самое простое, юзает виндозные библиотеки. Если это не нравится, есть выход - написать свою ось :(

Еще момент - если приложение консольное, то
Меню Project -> <Project Name> Properties -> Configuration Properties -> С/С++ -> Runtime Library -> поменять надо Multi-threaded Debug DLL (/MDd) на Multi-threaded Debug (/MTd)

после этого у меня все консольные приложения работают на других компах, где студии и в помине не было.
 
Похоже, я нашел ответ на свой вопрос на .
Построение проектов в Visual C++ без создания манифеста не поддерживается. Каждая программа C/C++, построенная в Visual C++ 2005, должна иметь манифест с описанием зависимостей от библиотек Visual C++.
Получается, Микрософт забил на совместимость. :(

...

DSDante, не нужно забывать, что любое приложение, даже самое простое, юзает виндозные библиотеки. Если это не нравится, есть выход - написать свою ось :)

Еще момент - если приложение консольное, то
Меню Project -> <Project Name> Properties -> Configuration Properties -> С/С++ -> Runtime Library -> поменять надо Multi-threaded Debug DLL (/MDd) на Multi-threaded Debug (/MTd)

после этого у меня все консольные приложения работают на других компах, где студии и в помине не было.

Ура! Заработало!!! Я 2 ГОДА парился над этой ошибкой, и подумать не мог, что дело в этом. Программа потяжелела на 34 кБ, но это не существенно. И дело не в том, консольная программа или нет.
Огромное спасибо
 
Немного поизучал данный вопрос, и вот что выяснил: добавление статичной библиотеки Multithreaded добавляет 43 кБ к файлу. Можно при этом не генерировать манифест (Project Properties - Linker - Manifest file - Generate manifest = No), но пропадает XP Style. В Warcraft 3, начиная с патча 1.21 в папке с игрой появились файлы
Microsoft.VC80.CRT.manifest,
msvcm80.dll,
msvcp80.dll,
msvcr80.dll,
которые обеспечивают совместимость со старыми сервис паками. Узнать бы, как это делается.
 
Все просто
Пишешь прогу
Смотришь депенденсы (зависимые ДЛЛ)
Копируешь в папку с прогой все депенденсы
Потом пишешь манифест на все депенденсы

и вуаля :(

ЗЫ в Варкрафте так и сделали, кстати...
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!