![]() |
|
Модераторы: xvr |
![]()
|
|
| qpharm |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 14 Регистрация: 25.1.2008 Репутация: нет Всего: нет |
Проект смешанный fortran + c++.
Компилятор gfortran выравнивает поля структур на 16 байтов, компилятор gcc - не выравнивает. Итого, совместный код, компилируется, но не выполняется. Как синхронизировать выравнивание полей в обоих компиляторах. Вроде бы должны быть опции, но не нашел нужных :( |
|||
|
||||
| marcusmae |
|
|||
![]() stravaganza ![]() ![]() Профиль Группа: Участник Сообщений: 874 Регистрация: 26.3.2006 Репутация: нет Всего: 39 |
Какая версия gcc? = Если > 3.0, то
подойдёт? -------------------- ἀπὸ μηχανῆς θεός |
|||
|
||||
| qpharm |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 14 Регистрация: 25.1.2008 Репутация: нет Всего: нет |
Для меня выглядит странно, что gcc управляется прагмами. Я так делал только в Виндоусе.
На всякий случай проверил, не работает. Нашел в сети, что есть недокументированная возможность __attribute__((aligned(16))) перед именем переменной нужно ставить, типа struct {} __attribute__((aligned(16))) s; Как результат, исчесли все предупреждения линкера, Warning: alignment 4 of symbol `sol00_' in _biosed.o is smaller than 16 in writeWmoL.o а работать правильно, не стало... :(( Неужели интерфейс взаимодействия фортрана и С очень узок? что можно вызывать только функции друг друга (передавая данные через стек) и все??? А возможна ли все-таки передача через глобальные переменные? |
|||
|
||||
| JackYF |
|
|||
![]() полуавантюрист ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 5814 Регистрация: 28.8.2004 Где: страна тысячи озё р Репутация: 3 Всего: 162 |
||||
|
||||
| MAKCim |
|
|||
![]() Воін дZэна ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5644 Регистрация: 10.12.2005 Где: Менск, РБ Репутация: 84 Всего: 207 |
qpharm,
Добавлено через 40 секунд это документированная возможность -------------------- Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі © |
|||
|
||||
| marcusmae |
|
|||
![]() stravaganza ![]() ![]() Профиль Группа: Участник Сообщений: 874 Регистрация: 26.3.2006 Репутация: нет Всего: 39 |
Ещё бы на всякий случай проверить версию gcc и обновить, если старый. Можно? Я тоже пишу совместный код C++/Fortran, но со структурами в фортране не приходилось. Даже не знаю, как это выглядит, модули что ли? Помимо этого есть ещё особенности. Например, Вы уверены, что то, что должно передаваться по ссылке/по значению действительно передаётся как надо? И всё же прагмы в gcc есть. -------------------- ἀπὸ μηχανῆς θεός |
|||
|
||||
| prof_GCC |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 14 Регистрация: 21.2.2008 Репутация: нет Всего: нет |
Интересно, откуда информация о том, что gcc не выравнивает поля структур??Все он выравнивает, кратно четырем байтам, если нужно изменить, тогда :
#pragma push(pack(n)) struct my_struct{ int a; char b; int c; }; #pragma pop |
|||
|
||||
![]()
|
| Правила форума "С/С++: Программирование под Unix/Linux" | |
|
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, xvr. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Программирование под Unix/Linux | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |