Форум программистов, компьютерный форум, киберфорум
C/С++ под Linux
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/9: Рейтинг темы: голосов - 9, средняя оценка - 4.67
5 / 5 / 2
Регистрация: 03.05.2016
Сообщений: 221

Перекомпиляция проекта на MFC под Linux с winelib нет заголовков afxwin.h и afx.h

12.04.2023, 11:42. Показов 2034. Ответов 15

Студворк — интернет-сервис помощи студентам
Здравствуйте! Пытаюсь перекомпилировать под работу в Linux проект, написанный на MFC.
Пользовался статьёй: https://linux-faq.ru/page/komanda-make.
Так же нашёл мануал: https://wiki.winehq.org/Winelib_User%27s_Guide, но по нему не совсем понятно как выполнять работу пошагово, в целом я выпонил рекомендации:
1) добавил в stdafx.h:

#define _AFX_PORTABLE
#define _FORCENAMELESSUNION
#define _AFX_NO_DAO_SUPPORT
#define _AFX_NO_DHTML_SUPPORT
#define _AFX_NO_OLEDB_SUPPORT
#define _AFX_NO_RICHEDIT_SUPPORT

2) использовал режим --interactive
Пример команды в Linux:
user@astra:~$ winemaker --interactive --lower-uppercase --mfc /home/user/MyProgect

При этом получаю ошибки:
fatal error: afxwin.h: Нет такого файла или каталога
stdafx.h:26:10: fatal error: afx.h: Нет такого файла или каталога

Подскажите пожалуйста как быть в такой ситуации? Как подключить atlmfc чтобы сборка проходила удачно?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
12.04.2023, 11:42
Ответы с готовыми решениями:

Afxwin.h afx.h и тд. MFC библиотеки
Здравствуйте, дело такое. не могу скомпилировать код, сначала проект выдает ошибку что не найден afxwin.h, я вручную закидываю файл в...

Перекомпиляция проекта
Всем привет! Скачал FlashDevelop, но что-то не получилось с установкой flex SDK ошибка вылетает. А нужно в одном проекте сделать для...

Компиляция Builder'овского проекта под Linux, (и освоение Linux после Builder'a)
Есть не очень маленький проект, написанный в винде на Builder'e. 1) Сложно ли его будет отредактировать что бы откомпилировать в...

15
 Аватар для Pphantom
2243 / 1503 / 690
Регистрация: 17.03.2022
Сообщений: 4,792
12.04.2023, 11:50
Если мне не изменяет склероз, то это костыльное подключение каких-то возможностей из новых стандартов, которые в нормальных компиляторах давно поддерживаются обычным образом.

Поэтому, пожалуй, первый совет - убрать эти include и посмотреть, не соберется ли без них. Если не соберется - выяснять, чего конкретно не хватает. Так в любом случае будет проще, чем тянуть за собой традиционное для MS наплевательство на стандарты.
0
 Аватар для Azathtot
754 / 351 / 90
Регистрация: 07.01.2023
Сообщений: 1,451
13.04.2023, 12:40
Цитата Сообщение от MaximSergeevith Посмотреть сообщение
Как подключить atlmfc чтобы сборка проходила удачно?
А никак. ATL под Linux нет. Либо собирайте MSVC под Wine либо переписывайте на POSIX идеологию
0
Windows must die
828 / 835 / 102
Регистрация: 23.11.2021
Сообщений: 4,855
Записей в блоге: 15
13.04.2023, 12:55
Цитата Сообщение от Azathtot Посмотреть сообщение
переписывайте на POSIX
Единственно правильный вариант. Заодно и нативно собираться будет.
0
5 / 5 / 2
Регистрация: 03.05.2016
Сообщений: 221
14.04.2023, 15:52  [ТС]
Azathtot, как тогда объяснить, что если запустить .exe - файл этого приложения через wine в Linux - оно запускается? Каким то образом ведь происходит интерпретация afxwin.h и afx.h в таком случае?
0
599 / 421 / 136
Регистрация: 02.10.2008
Сообщений: 1,796
Записей в блоге: 1
14.04.2023, 16:07
Цитата Сообщение от MaximSergeevith Посмотреть сообщение
.exe - файл этого приложения через wine в Linux - оно запускается?
Для этого надо понимать что такое на самом деле wine и Winelib - это просто транслятор вызовов WinAPI в POSIX - виндошная программа даже не подразумевает о том, что она работает не в винде. Никакая перекомпиляция *.exe не нужна, для запуска в линукс через wine/
0
5 / 5 / 2
Регистрация: 03.05.2016
Сообщений: 221
14.04.2023, 16:25  [ТС]
Eddy_Em, а можно подробнее? Что значит переписать под POSIX? Может какие примеры есть, показывающие что именно вы имеете ввиду? Уж если переписывать - то наверное под wxWidgets, раз уж код надо менять или под POSIX вариант проще? Буду благодарен за предоставленные примеры и (или) ссылки на статьи
0
599 / 421 / 136
Регистрация: 02.10.2008
Сообщений: 1,796
Записей в блоге: 1
14.04.2023, 16:32
Цитата Сообщение от MaximSergeevith Посмотреть сообщение
Что значит переписать под POSIX
Например вызов WinAPI OpenFile(), который используется MFC-классом CFile переписать с использованием вызова POSIX open().

И это делать придётся со всеми используемыми функциями WinAPI. Именно этим и занимается прослойка WineLib. С её помощью можно написать нативную linux-прогу, но она будет использовать саму WineLib и виндошный экзешник со всеми необходимыми DLL-ками.
1
Windows must die
828 / 835 / 102
Регистрация: 23.11.2021
Сообщений: 4,855
Записей в блоге: 15
14.04.2023, 16:58
Цитата Сообщение от MaximSergeevith Посмотреть сообщение
Что значит переписать под POSIX?
Написать нативное линуксовое приложение. Фактически — почти с нуля переписать приличную часть кода.
Помочь не могу: я — радикальный антимастдайщик, я форточками уже минимум лет 20 не пользуюсь.
0
 Аватар для Pphantom
2243 / 1503 / 690
Регистрация: 17.03.2022
Сообщений: 4,792
14.04.2023, 18:30
MaximSergeevith, начните все-таки с моего совета выше. Если других ошибок у вас не вылезает, то с немалой вероятностью вам просто не нужны эти заголовочные файлы и все, а тогда вы уже пару дней решаете несуществующую проблему.
0
 Аватар для Azathtot
754 / 351 / 90
Регистрация: 07.01.2023
Сообщений: 1,451
14.04.2023, 19:41
Цитата Сообщение от MaximSergeevith Посмотреть сообщение
Каким то образом ведь происходит интерпретация afxwin.h и afx.h в таком случае?
Происходтит. На этапе компиляции MSVC вдумчиво эту хрень пережевывает и превращает в вызовы CoCreateInstnce и прочие, которые в Wine отлично реализованы. Но вот кроме MSVC о существовании ATL,MFC и прочей хренини один компилятор (gcc,ICC) не догадывается.
Если вы хотите компилить свое приложение с WineLib то будье любезны, использовать методы WineLib

Добавлено через 2 минуты
P.S. Почитайте это про компиляцию с MFC
0
5 / 5 / 2
Регистрация: 03.05.2016
Сообщений: 221
15.04.2023, 09:34  [ТС]
Pphantom, убрал я эти загноловки ещё два дня назад, результат - куча ошибок, типа:
создаётся производный класс от CArray, т.е.

class CGByteArray : public CArray<int, int>
{
...
},

при попытке перекомпиляции выдаётся ошибка, в которой стрелка указывает на скобку < и надпись: "недопустимое имя шаблона", ну и множество других ошибок разного рода, подробнее могу в понедельник скинуть, что там в консоли получается

Добавлено через 7 минут
Azathtot, читал я ту статью, на которую вы указали ещё до того, как тему эту создать - почти ничего не понятно, а именно:
1) какой толк с этих заголовков и где их правильно разместить:
#define _AFX_PORTABLE
#define _FORCENAMELESSUNION
...

я их размещал в файле stdafx.h

2) использовал режим --interactive mode как указано и каждый раз по требованию указывал ключ --mfc
0
 Аватар для Pphantom
2243 / 1503 / 690
Регистрация: 17.03.2022
Сообщений: 4,792
15.04.2023, 13:02
Цитата Сообщение от MaximSergeevith Посмотреть сообщение
убрал я эти загноловки ещё два дня назад, результат - куча ошибок
А, ясно. Да, тогда проблема действительно существует и, увы, в этом случае можно только согласиться с высказываниями выше в теме: придется переписывать под POSIX, иначе это не лечится.

Собственно, в этом случае список ошибок - это список того, что нужно переделывать. Как вариант - писать "обертки" для недостающих функций/классов, но это, пожалуй, менее выгодно, чем просто привести код в порядок (времени будет потрачено немногим меньше, а проблема при этом заметется под ковер).
0
 Аватар для Azathtot
754 / 351 / 90
Регистрация: 07.01.2023
Сообщений: 1,451
15.04.2023, 13:47
Цитата Сообщение от MaximSergeevith Посмотреть сообщение
какой толк с этих заголовков и где их правильно разместить:
Вам же сказано, что сначала надо собрать MFC с winelib. Вы это сделали?
To use the MFC in a Winelib application you will first have to recompile the MFC with Winelib
0
5 / 5 / 2
Регистрация: 03.05.2016
Сообщений: 221
16.04.2023, 09:50  [ТС]
Azathtot, Azathtot, вы бы свой тон поменяли сперва, что за запись: "вам же сказано ..."? Вы во мне школьника увидели? Или знакомого своего?
Если я написал: "2) использовал режим --interactive mode как указано и каждый раз по требованию указывал ключ --mfc" - это о чём вам говорит?
Переходя с конфликтного тона на конструктивный напишу, чего я не делал:
не понял как применить "-isystem $(WINE_INCLUDE_ROOT)/msvcrt", т.е. как и после чего с чем дополнительно скомпоновать эту строку в командной строке.

А может вас не затруднит самому пересобрать таким образом MFC проект? Судя по вашим уверенным комментариям вы это на раз/два сделаете?
А ещё в конце текста с рекомендацией по компиляции есть строчка:
"Maybe we will have ready-made makefile here someday..." - это или шутка автора или прямой признак того, что этот процесс - просто чтобы время убить и не факт что с пользой.

Я начал писать сюда и создавать эту тему только потому, что не смог сам разобраться с этим мануалом - в конце концов нормальный документ подразумевает пошаговую инструкцию, а это такое ощущение написано просто "наотвяжись" по ринципу "лишь бы было"
0
 Аватар для Azathtot
754 / 351 / 90
Регистрация: 07.01.2023
Сообщений: 1,451
16.04.2023, 10:21
Цитата Сообщение от MaximSergeevith Посмотреть сообщение
это о чём вам говорит
только о том, что вы использовали эти ключи.
Вы ни слова ни сказали о том, что взыли mfc из MSVC и собрали его с winelib
Цитата Сообщение от MaximSergeevith Посмотреть сообщение
А может вас не затруднит самому пересобрать таким образом MFC проект?
Большое спасибо, но этими костылями (MFC) не пользуюсь, предпочитаю кроссплатформенные решения.
Цитата Сообщение от MaximSergeevith Посмотреть сообщение
"Maybe we will have ready-made makefile here someday..." - это или шутка автора или прямой признак того, что этот процесс - просто чтобы время убить и не факт что с пользой.
Это скорее рекомендации не собирать MFC проект winelib а использовать MSVC для сборки, благо собранные им проекты отлично запускаются по Wine
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
16.04.2023, 10:21
Помогаю со студенческими работами здесь

QFile.open() под Linux работает, под windows нет
QDateTime dt = QDateTime::currentDateTime(); logfilepath = &quot;log_&quot; + dt.toString() + &quot;.txt&quot;; logfilepath.replace(' ','_'); ...

Android Studio перекомпиляция проекта
Android Studio 2.1.2 При запуске программы(перекомпиляции) мне кажется что программа не заменяется, а просто перезапускается.. Иногда...

Qt сборка проекта под Linux
Здравствуйте! Имею проект написанный из под Windows. Хочу собрать debug-сборку под Linux (Ubuntu). Да, вот только Qt creator кидает...

Сборка проекта под Linux
Есть проект. Написан в Visual Studio, под Windows. Сейчас появилась необходимость собирать проект в зависимости от входных...

Компиляция проекта под Windows на Linux
Добрый день, у меня возникла ошибка. При попытке компиляции проекта под Windows на Linux, mingw32 выдает кучу ошибок: ...


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

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru