Ответ 1
Самое простое решение - просто определить __stdcall ни к чему условно в Linux.
Я пытаюсь перенести приложение Windows в Linux. Это приложение отмечает некоторые функции с атрибутом __stdcall
. Тем не менее, мне сказал друг, что stdcall используется только для окон и не имеет смысла в linux (но они существуют в Windows GCC).
Я попытался найти Google об этом и получил некоторые результаты, заявив, что в Linux есть stdacll.
Итак...??
Кроме того, для GCC я видел 2 реализации для этого: __attribute__((__stdcall__))
и __attribute__((stdcall))
(без подчеркивания возле stdcall).
Какой из них предпочтительнее (если вообще применяется к Linux)?
Спасибо!
Самое простое решение - просто определить __stdcall ни к чему условно в Linux.
Здесь ссылка на описание __stdcall на MSDN: http://msdn.microsoft.com/en-us/library/zxk0tw93(VS.80).aspx
Он используется только для вызова функций WinAPI. Чтобы перенести такое приложение Windows в Linux, вам нужно гораздо больше, чем просто определить __stdcall для ничего:
#ifndef WIN32 // or something like that...
#define __stdcall
#endif
Вам также нужно будет вызывать специфичные для Linux функции API вместо Win32 API. В зависимости от конкретной части Win32 API и размера приложения (количество кода) он может быть где угодно между умеренно сложными и сложными.
Какие конкретные функции отмечены приложением как __stdcall?
Действительно, порт Windows GCC должен иметь __stdcall, поскольку он должен иметь возможность генерировать соответствующий код для платформы Win32. Но поскольку в Linux существует только одно стандартное соглашение о вызове и оно совпадает с выводом компилятора по умолчанию, это утверждение не требуется.
Причина, по которой ваше приложение не компилируется в Linux, почти наверняка связано с тем, что он ссылается на функции Win32 API, которые не определены в Linux - вам нужно найти подходящие аналоги Linux. API Win32 API и Linux API GLibc очень разные и не могут быть легко заменены.
Вероятно, самым простым способом переноса вашего приложения в Linux было бы использовать Wine, то есть модифицировать код Windows таким образом, чтобы он работал плавно под Wine в Linux. Таким образом, даже самые сложные приложения, такие как современные компьютерные игры, были запущены под Linux.
Конечно, если вы действительно хотите, чтобы он запускался изначально под Linux, то портирование - единственный способ пойти.