Несколько дней назад я начал программировать с C после программирования на С++, однако моя 64-битная машина Windows Vista не смогла создать проект C. Я перекомпилировал код с компилятором MinGW Dev-С++ без проблем. Однако, когда я запустил код, я получил следующую ошибку:
Неподдерживаемое 16-разрядное приложение Программа или функция «??C:Dev-Cppgcc.exe» не может запускаться или запускаться из-за несовместимости с 64-разрядными версиями Windows. Обратитесь к поставщику программного обеспечения, чтобы узнать, доступна ли версия с 64-разрядной версией Windows.
Это проблема с компиляцией кода C с использованием компилятора С++?
Sheldon Allen 22 сен. 2011, в 00:12
Поделиться
Какое именно сообщение об ошибке, какой компилятор вы используете и на какой платформе вы находитесь?
user142019 21 сен. 2011, в 21:40
А какой компилятор или IDE вы используете?
duskwuff 21 сен. 2011, в 21:41
просто чтобы прояснить это, вы можете скомпилировать C для 64-битной системы. Теперь, что компилятор и сообщение об ошибке?
Неподдерживаемое 16-разрядное приложение
Karoly Horvath 21 сен. 2011, в 21:42
Судя по добавленной вами ошибке, она не имеет ничего общего с вашим кодом — ваша система не любит ваш двоичный файл gcc.exe.
mah 21 сен. 2011, в 21:53
У меня такая же проблема с gcc (g ++) 4.5.2. Когда я пытаюсь скомпилировать код с OpenMpi, я всегда
webas2 27 сен. 2011, в 10:37
Рассматривали ли вы установить какой-либо дистрибутив Linux. Они очень дружелюбны к разработчикам
Basile Starynkevitch 20 авг. 2018, в 19:04
Показать ещё 4 комментария
Поделиться:
windows-vista
4 ответа
Лучший ответ
Ошибка, которую вы видите, — это использование античного (как в 16-разрядной версии Windows 3.1) программного обеспечения, которое Windows 64-бит не обеспечивает обратной совместимости. Это не имеет ничего общего с C или С++, просто очень старым компилятором.
Вы можете либо установить Windows 7 с XP-mode, что обеспечивает виртуальную 32-разрядную машину XP, которая работает практически без проблем под управлением Windows 7 или другого 32-разрядного решения для виртуализации или загружает более новую версию gcc.exe или какой-либо другой компилятор, которому менее 20 лет:
Eclipse 21 сен. 2011, в 23:05
Поделиться
VS даже не поддерживает C99, а Cygwin не предназначен для разработки.
user2384250 29 май 2013, в 18:55
Eclipse 29 май 2013, в 21:26
Вы бы порекомендовали кому-то разрабатывать на C виртуальную машину, когда ваша ОС получила действительно хороший компилятор (MinGW)? Также вы заботитесь о том, чтобы OP был новичком, но вы предлагаете только 1 хороший компилятор, на мой взгляд, есть QtCreator, который будет лучше для новичка в любом сценарии qt-project.org/downloads#qt-creator .
user2384250 30 май 2013, в 07:21
Показать ещё 1 комментарий
Я получил то же сообщение об ошибке при случайном добавлении переключателя -c , который сообщает компилятору не связывать исполняемый файл. Снятие переключателя заставило его снова работать.
НЕПОДДЕРЖИВАЕМОЕ 16-РАЗРЯДНОЕ ПРИЛОЖЕНИЕ. Решение проблемы)
> gcc —help
.
-c Compile and assemble, but do not link
msiemens 01 фев. 2014, в 00:10
Поделиться
Я сделал ту же ошибку.
Lei Yang 21 авг.
2017, в 03:06
У меня была аналогичная проблема, и это был ответ msiemens, который дал мне подсказку для его решения. Это не связано с версией MinGW. Просто мой файл .exe на самом деле не был исполняемым.
Я пытался скомпилировать и построить с помощью команды:
> g++ -c cpptest.cpp -o cpptest.exe
Но с -c, g++ просто компилируется без ссылки. В результате cpptest.exe представляет собой файл cpptest.o(двоичный файл объекта, но не исполняемый) с другим именем.
Для компиляции и ссылки я затем используется (как указано Алехандро):
> g++ cpptest.cpp -o cpptest.exe
Или в два этапа:
> g++ -c cpptest.cpp -o cpptest.o > g++ cpptest.o -o cpptest.exe
Они создают фактический исполняемый файл.
Miguel Muñoz 01 апр. 2015, в 09:49
Поделиться
Это какая-то проблема с Mingw. Проблема заключается не в том, что вы используете старый компилятор. Это случилось со мной с последней версией компиляторов Mingw. Я нашел обходное решение, которое может помочь некоторым людям. Эта проблема проявляется при создании моего проекта с помощью Makefile.
Если я создам его вручную с помощью командной строки, он отлично работает, результат .exe выполняется без проблем.
Компилируя вручную, я имею в виду, например, для С++:
c:mydir > g++ source1.cpp source2.cpp -o myprog.exe
Мое приложение было очень маленьким, всего несколько источников, необходимых для проверки некоторых изменений. Если у вас есть более сложное приложение с Makefile, это обходное решение, вероятно, вам не поможет.
Alejandro Dobniewski 29 май 2013, в 17:20
Поделиться
Ещё вопросы
Источник: overcoder.net
Почему не работает код, какие есть нюансы fasm?
Вроде все правильно указал. В чем может быть причина не работоспособности?
- Вопрос задан более трёх лет назад
- 613 просмотров
Комментировать
Решения вопроса 0
Ответы на вопрос 2
А зачем у Вас вообще include ‘win32a.inc’ и .code, если Вы под DOS пишете. Там никаких WinAPI и секций кода и данных нет. А вот org 100h в начале не помешал бы. Хоть fasm и может компилировать под различные системы, но оформление кода всегда разное; в википедии есть примеры для каждой из систем.
Ответ написан более трёх лет назад
Нравится 1 8 комментариев
Попробуйте набрать 100h вначале. Увидите ошибку.
Konstantin Malyarov: Взял свежий fasm с сайта, взял пример из википедии:
org 100h mov ah,9h mov dx,hello int 21h mov ah,8h int 21h int 20h hello db 13,10,»Hello, World!$»
скормил второго первому и получил com-файл. Проверил, работает без ошибок.
none7: Выплывает окошко: Неподдерживаемое 16-разрядное приложение.
Не удалось запустить программу или компонент «??C:Userstest.com» из-за несовместимости с 64-разрядной версией Windows. Обратитесь к разработчику за версией программы, совместимой с 64-разрядной версией Windows.
Konstantin Malyarov: Ну так нельзя в 64-битной Windows запускать 16-битные приложения. Используйте DosBox или 32-битную Windows в виртуальной машине. По другому никак.
none7: по этому и использую WinAPI, чтоб писать под 64.
Konstantin Malyarov: Это никак не связано. Вот так выглядит HelloWorld для x64:
; Example of 64-bit PE program format PE64 GUI entry start section ‘.text’ code readable executable start: sub rsp,8*5 ; reserve stack for API use and make stack dqword aligned xor r9d,r9d lea r8,[_caption] lea rdx,[_message] xor rcx,rcx call [MessageBoxW] mov ecx,eax call [ExitProcess] section ‘.const’ data readable _caption du ‘Win64 assembly program’,0 _message du ‘Hello, World!’,0 section ‘.idata’ import data readable dd 0,0,0,RVA kernel_name,RVA kernel_table dd 0,0,0,RVA user_name,RVA user_table dd 0,0,0,0,0 kernel_table: ExitProcess dq RVA _ExitProcess dq 0 user_table: MessageBoxW dq RVA _MessageBoxW dq 0 kernel_name db ‘KERNEL32.DLL’,0 user_name db ‘USER32.DLL’,0 _ExitProcess dw 0 db ‘ExitProcess’,0 _MessageBoxW dw 0 db ‘MessageBoxW’,0
Как видишь никаких int 21h тут нет, MessageBox и ExitProcess это WinAPI. И именно работа с ними называется использованием WinAPI, а не строчка include ‘win32a.inc’. А DOS-программы всегда 16-битные, в 32-битных системах они запускаются в эмуляторе. В 64-битных его вырезали под корень.
none7: то есть int 21h урезан в х64 и я не смогу им пользоваться?
Просто в отладчике int 21h вызывает ошибку.
OllyDbg v2.00.01
Access violation when reading [FFFFFFFF] — Shift+Run/Step to pass exception to the program
Не хватает прав. Просто я не знаю как их расширить. Или это не реально?
Konstantin Malyarov: Правильно сказать вырезан напрочь. Никаких прерываний вообще нет, как и доступа к I/O портам, доступа к физической памяти, даже чтение и запись виртуальной памяти допускается лишь с позволения ядра ОС и естественно никакого доступа к BIOS. Все 32/64-битные приложения взаимодействуют с ОС лишь посредством вызова WinAPI так было начиная с Windows 2000. Тогда же появился эмулятор 16-битного режима и DOS под названием NTVDM, 32/64-битные приложения же никогда не имели доступа к прерываниям DOS/BIOS.
Источник: qna.habr.com
Неподдерживаемое 16-разрядное приложение
Отправлено 14 Ноябрь 2016 — 13:59
Не удалось запустить программу или компонент «??С:Program FilesDrWebtips.exe» из-за несовместимости с 64 разрядной версией Windows. Обратитесь к разработчику программного обеспечения за версией программы, совместимой с 64-разрядной версией Windows.
1. все работает как обычно (DrWeb в трее)
2. увести компьютер в hibernate
3. включить компьютер
4. компьютер загрузится и Windows покажет экран блокировки
5. ввести пароль и войти в Windows
6. Windows покажет рабочий стол, а на нём будет такое окно с таким текстом
Воспроизводится не всегда.
Версия программы: Dr.Web Security Space 11.0. Последнее обновление: 2016-11-14 13:44
Прикрепленные файлы:
- DrWeb Неподдерживаемое 16 разрядное приложение.png12,88К 0 Скачано раз
#2
Konstantin Yudin
Konstantin Yudin
Отправлено 14 Ноябрь 2016 — 14:45
пока висит это окно процесс tips.exe есть? если да, можете снять дамп?
и проверьте сам файл, в его свойствах есть подпись. возможно он поврежден
With best regards, Konstantin Yudin
Doctor Web, Ltd.
#3
Fishart
Отправлено 14 Ноябрь 2016 — 15:08
Проверил цифровую подпись. Выдаёт «Цифровая подпись действительна» (для sha1 и sha256). Фото ниже приложено.
Насколько помню, процесса нету, когда окно весит. Когда в следующий раз воспроизведётся, то «сфотографирую» через Sysinternals Process Explorer.
По моим догадкам, окно всплывает, когда DrWeb «хочет» показать уведомление о том, что ознакомительная лицензия, но компьютер заблокирован после возврата из hibernate.
Прикрепленные файлы:
- Tips.exe цифровая подпись.png48,01К 0 Скачано раз
#4
Fishart
Отправлено 14 Ноябрь 2016 — 15:14
Ещё, на всякий случай, проверил, копируется ли папка «C:Program FilesDrWeb» в другое место. Папка скопировалась успешно.
#5
phantom83
Отправлено 14 Ноябрь 2016 — 15:17
вот рекомендация по снятию дампа от Дианы
#6
Konstantin Yudin
Konstantin Yudin
Отправлено 14 Ноябрь 2016 — 15:26
>По моим догадкам, окно всплывает, когда DrWeb «хочет» показать уведомление о том, что ознакомительная лицензия
нет, этот процесс показывает советы в трее. но похоже он стартует как то странно. система не видит в нем валидного бинаря. рока слабо представляю как это может быть. может подкачка с диска еще не работает?
а если выключить самозащиту, и повторить сценарий, будет воспроизводится?
With best regards, Konstantin Yudin
Doctor Web, Ltd.
#7
Fishart
Отправлено 14 Ноябрь 2016 — 16:03
На диске свободно около 100 гигабайт. Настройки файла подкачки:
Прикрепленные файлы:
#8
Fishart
Отправлено 14 Ноябрь 2016 — 16:05
а если выключить самозащиту, и повторить сценарий, будет воспроизводится?
А как её отключить?
#9
Dmitry_rus
Dmitry_rus
Отправлено 14 Ноябрь 2016 — 16:13
Клик по пауку в трее — открыть замок — Настройки — Основные — Самозащита
#10
Konstantin Yudin
Konstantin Yudin
Отправлено 14 Ноябрь 2016 — 16:34
На диске свободно около 100 гигабайт. Настройки файла подкачки:
не, я не о том. например самозащита не дала обработать page fault или еще чего по хуже.
With best regards, Konstantin Yudin
Doctor Web, Ltd.
#11
Fishart
Отправлено 22 Ноябрь 2016 — 03:50
Воспроизвелось. Куда слать?
В общий доступ выкладывать не хочется.
Источник: forum.drweb.com