Есть ли в Linux STDCALL?

Я пытаюсь портировать Приложение Windows на Linux. Это приложение отмечает некоторые функции с __stdcall атрибут. Однако мне сказал друг, что stdcall используется только на окнах и не имеет никакого значения в Linux (но ДЕЙСТВИТЕЛЬНО существует в Windows GCC). Я попытался искать Google об этом и добрался, некоторые результаты указывают, что СУЩЕСТВУЕТ stdacll в Linux.

Так...??

Кроме того, для GCC я видел 2 реализации для этого: __attribute__((__stdcall__)) и __attribute__((stdcall)) (без символов нижнего подчеркивания рядом stdcall). Какой предпочтен (Если относился к Linux вообще)?

Спасибо!

18
задан Break Point 16 June 2010 в 14:34
поделиться

2 ответа

Простейшее решение - просто определить __stdcall как пустое условное значение в Linux.

11
ответ дан 30 November 2019 в 08:47
поделиться

Вот ссылка на описание __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?

Действительно, порт GCC для Windows должен иметь __stdcall, потому что он должен иметь возможность генерировать соответствующий код для платформы Win32. Но поскольку в Linux существует только одно стандартное соглашение о вызовах, которое совпадает с выводом компилятора по умолчанию, этот оператор не нужен.

Причина, по которой ваше приложение не компилируется под Linux, почти наверняка связана с тем фактом, что оно ссылается на функции Win32 API, которые не определены под Linux - вам нужно найти подходящие аналоги для Linux. Win32 API и Linux GLibc API очень сильно различаются и не могут быть легко заменены.

Вероятно, самый простой способ перенести ваше приложение на Linux - это использовать Wine, то есть изменить код Windows таким образом, чтобы он без проблем работал под Wine в Linux. Таким образом, даже самые сложные приложения, такие как современные компьютерные игры, были созданы для работы под Linux.

Конечно, если вы действительно хотите, чтобы он работал под Linux, перенос - единственный выход.

10
ответ дан 30 November 2019 в 08:47
поделиться
Другие вопросы по тегам:

Похожие вопросы: