C++ без Framework

Тема в разделе "Общие вопросы по С и С++", создана пользователем DSDante, 5 фев 2009.

Наш партнер Genesis Hackspace
  1. DSDante

    DSDante Гость

    Простите, если вопрос уже был (вопрос популярный), но ни поиск по форуму, ни вообще в инете мне не помог.
    Итак, я написал программу, выдающую "Hello, world!", и хочу откомпилить ее в Visual Studio 2008 так, чтобы она запустилась на компах, где VS отсутствует (как и вообще Framework любой версии).
    Большинство ответов на этот вопрос сводится к "а зачем тебе это вообще надо?" и "в висте уже есть фреймворк, лучше сразу привыкай". Но, во-первых, фреймворк есть на 2% компьютеров, которые мне встречались, во-вторых, мне не нравится виста, и в-третьих, моя гордость программиста не успокоится, пока я не решу эту простую, казалось бы, проблему. :)
    Еще часто встречаются ответы, что, мол, запускать программу без фреймворка - то же самое, что запускать без операционки. Но ведь тот же самый код, скомпилированный в старом VC прекрасно работал!
     
  2. @LE}{@NDER

    @LE}{@NDER Гость

    Гы.
    1. Создавай в студии С++ проект Win32 Console Application
    2. Вытирай все, кроме #include "stdafx.h"
    3. Вставляй код:

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

    void main()
    {
    cout<<"Hello world!\n";
    getchar();
    }
    или
    Код (Text):
    #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? Пиши на чистых С плюсах.
     
  3. DSDante

    DSDante Гость

    Я создавал Empty Project, и вручную писал единственный *.cpp типа
    Прога весила килобайт эдак семь, но все равно содержала в себе манифест, и требовала фреймворк.

    Будете смеяться, но я не знал, что существует WinXP SP3. :) И все равно хочется совместимости хотя бы со старыми сервис паками.
     
  4. @LE}{@NDER

    @LE}{@NDER Гость

    Меню Project - <Project Name> Properties - Configuration Properties - Manifest Tool - опцию Embed manifest ставь NO
    если не поможет еще меняй Меню Project - <Project Name> Properties - Configuration Properties - Linker - Manifest file - Generate manifest=No
    этого по идее должно хватить
     
  5. DSDante

    DSDante Гость

    Уже пробовал. Создается файл *.exe.manifest, без которого прога выдает ошибку, мол, MSVCR90D.dll не найден.
     
  6. European

    Регистрация:
    4 сен 2006
    Сообщения:
    2.566
    Симпатии:
    1
    DSDante, по моему Вы путаете основополагающие вещи.
    Вы пишете на управляемом С++? Если да, то без установки NET Framework не обойтись. Если нет, то все должно работать после корректной настройки приложения.
     
  7. DSDante

    DSDante Гость

    Все то же самое относится к прогам, которые компилировались в Borland C++ (в DOS).

    Кстати, когда я запускаю прогу с манифестом на компе без фреймворка, выдается ошибка, что программа некорректно настроена. Я три раза облазил все Project Properties, но решения проблемы не нашел.
     
  8. etc

    etc Гость

    Как определяли и эти 2% из скольки тестируемых?
    а чего так, пока самая лучшая десктоповая ось, по крайней мере у микрософта.
    плохо вникли в Сообщение #6, я так думаю.
     
  9. European

    Регистрация:
    4 сен 2006
    Сообщения:
    2.566
    Симпатии:
    1
    DSDante, телепаты все в отпуске. Можете прямо ответить на мой вопрос?
     
  10. DSDante

    DSDante Гость

    Давайте не будем спорить о вкусах, несовместимость с SP2 - уже достаточная причина разобраться в этом.

    Объясните, пожалуйста. Как я понял, Managed C++ - это расширение синтаксиса C++, которое я никогда не использовал, и которого не было во времена Borland C++. Так что оно ни при чем.
     
  11. European

    Регистрация:
    4 сен 2006
    Сообщения:
    2.566
    Симпатии:
    1
    Так чего Вы тему в Net засунули, если используете чистый C++?
     
  12. DSDante

    DSDante Гость

    Просто ошибся. Перенесите ее в С++ > VC, если хотите.
     
  13. European

    Регистрация:
    4 сен 2006
    Сообщения:
    2.566
    Симпатии:
    1
    Что значит "хотите-нехотите"? Вы изначально вводите в заблуждение, а потом просите помощи в решении несуществующей проблемы
     
  14. DSDante

    DSDante Гость

    Извините, я не специально. А проблема, имхо, все же существующая.
     
  15. etc

    etc Гость

    А зачем вы начали?
    А это то тут причем? на 2000 винде все работает
    Ну да ладно, раз перенесли, значит ушел я.
     
  16. European

    Регистрация:
    4 сен 2006
    Сообщения:
    2.566
    Симпатии:
    1
  17. @LE}{@NDER

    @LE}{@NDER Гость

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

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

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

    DSDante Гость

    Похоже, я нашел ответ на свой вопрос на msdn.microsoft.com/ru-ru/library/ms235342.aspx.
    Получается, Микрософт забил на совместимость. :(

    ...

    Ура! Заработало!!! Я 2 ГОДА парился над этой ошибкой, и подумать не мог, что дело в этом. Программа потяжелела на 34 кБ, но это не существенно. И дело не в том, консольная программа или нет.
    Огромное спасибо
     
  19. DSDante

    DSDante Гость

    Немного поизучал данный вопрос, и вот что выяснил: добавление статичной библиотеки 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,
    которые обеспечивают совместимость со старыми сервис паками. Узнать бы, как это делается.
     
  20. alexsid

    alexsid Гость

    Все просто
    Пишешь прогу
    Смотришь депенденсы (зависимые ДЛЛ)
    Копируешь в папку с прогой все депенденсы
    Потом пишешь манифест на все депенденсы

    и вуаля :(

    ЗЫ в Варкрафте так и сделали, кстати...
     
Загрузка...

Поделиться этой страницей