Документ взят из кэша поисковой машины. Адрес оригинального документа : http://wasp.phys.msu.ru/forum/index.php?showtopic=6071
Дата изменения: Unknown
Дата индексирования: Sun Apr 10 03:36:11 2016
Кодировка: Windows-1251

Поисковые слова: m 27
Как сделать stdcall в GNU C Compiler? - Студенческий форум Физфака МГУ
IPB

Здравствуйте, гость ( Вход | Регистрация )

 
Reply to this topicStart new topic
Как сделать stdcall в GNU C Compiler?
M_T
сообщение 27.9.2006, 16:42
Сообщение #1


супер-элита
*********

Группа: VIP
Сообщений: 777
Репутация: 32

Предупреждения:
(0%) -----


А вот еще такой вопрос программерам. Как попросить GNU С Compiler вызывать процедуру в соответствии с stdcall? Мне нужно своя код на сях с фортрановской процедурой склеить, а g++ не ест ни extern "C" void __stdcall foo_(...), с любым числом подчеркиваний перед stdcall, ни __cdecl, ни даже __attribute__((__cdecl__)) (где-то я и такое откопал). Вроде он весь из себя ANSI-правильный, так я никак не найду, как по ANSI это называется.
Если это важно, компилирую под вот ЭТО:
Код
Machine hardware:   sun4u
OS version:         SunOS 5.9
Processor type:     sparc
Hardware:           SUNW,Sun-Fire-V250

Help! preved.gif

Сообщение отредактировал M_T - 27.9.2006, 16:46


--------------------
Just me, Gavrilla.
Go to the top of the page Вставить ник
+
ignit0r
сообщение 27.9.2006, 17:14
Сообщение #2


живу здесь
*******

Группа: Гуру
Сообщений: 337
Репутация: 96

Предупреждения:
(0%) -----


А чем скомпилирована процедура на FORTRAN? Если это g77, то можно попробовать следующий вариант:
Код
extern "C"{
void foo_(...)
}

Т.е. явно соглашение о передаче аргументов stdcall указывать не нужно.

Да, платформа, надо сказать, непопсовая good.gif


--------------------
Неужели не ясно, что выбирать? Жизнь надо выбирать! Что же еще? Не телескопы же ваши, не пробирки... Да пусть они ими подавятся, телескопами вашими! Диффузными газами!.. Жить надо, любить надо, природу ощущать надо - ощущать, а не ковыряться в ней! (А. и Б. Стругацкие, "За миллиард лет до конца света")
----
It's like the Alt+F4 for our universe...
Go to the top of the page Вставить ник
+
M_T
сообщение 27.9.2006, 17:20
Сообщение #3


супер-элита
*********

Группа: VIP
Сообщений: 777
Репутация: 32

Предупреждения:
(0%) -----


Ну, собственно, GCC и скомпилирована. Это ж теперь не просто GNU C Compiler, а GNU Compilers Collection!
А так, просто extern "C", я раньше и пробовал. Но это все время дает Segmentation fault (possibly corrupt stack). Что логично, учитывая, что каждый хочет почистить стек. И он становится слишком чистым...


--------------------
Just me, Gavrilla.
Go to the top of the page Вставить ник
+
ignit0r
сообщение 27.9.2006, 17:45
Сообщение #4


живу здесь
*******

Группа: Гуру
Сообщений: 337
Репутация: 96

Предупреждения:
(0%) -----


Может быть, SEGFAULT возникает по какой-то другой причине?
У меня тестовая программа с предложенным мной синтаксисом компилируется и работает без проблем.
Аргументы передаются в процедуру на Фортране через указатель? Возможно, имеет место несоответствие передаваемых и ожидаемых типов аргументов.

Было бы здорово увидеть проблемный вызов и объявление процедуры на Фортране.

Сообщение отредактировал ignit0r - 27.9.2006, 17:49


--------------------
Неужели не ясно, что выбирать? Жизнь надо выбирать! Что же еще? Не телескопы же ваши, не пробирки... Да пусть они ими подавятся, телескопами вашими! Диффузными газами!.. Жить надо, любить надо, природу ощущать надо - ощущать, а не ковыряться в ней! (А. и Б. Стругацкие, "За миллиард лет до конца света")
----
It's like the Alt+F4 for our universe...
Go to the top of the page Вставить ник
+
M_T
сообщение 27.9.2006, 18:11
Сообщение #5


супер-элита
*********

Группа: VIP
Сообщений: 777
Репутация: 32

Предупреждения:
(0%) -----


Опс, а я тут пока эксперименировал, вроде сам все понял. Хотел поподробнее написать, что вызывает ошибку -- и, как обычно бывает, все решилось. Давно я что-то серьезно не программировал... Все выяснял, как соотносятся разные типы данных в фортране и си, как сделать, чтобы и там и там был integer четырехбайтный... И забыл, что раз все аргументы по ссылке передаются, это совершенно не важно, все равно там в стеке именно адрес лежит. И самое главное -- как раз не забыть "&" в нужном месте. А именно его я в одном месте забыл (что интересно, только в одном из четырех).
Все, спасибо! Все наконец-то работает. Не там искал...


--------------------
Just me, Gavrilla.
Go to the top of the page Вставить ник
+

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



Текстовая версия Сейчас: 10.04.2016, 3:36