iiv 13 22 октября, 2017 Опубликовано 22 октября, 2017 · Жалоба Добрый день, не пинайте, пожалуйста, сильно. На ембеддед GNU линукс в hardkernelовскую борду есть непреодолимое желание притащить в сорсах одну огромную фортрановскую библиотеку. Она компилится, но работает не правильно. Причина: есть структура TYPE STRUCT_MYS REAL*8 A LOGICAL D ... END TYPE TYPE (STRUCT_MYS) :: MYS(100) которая включается почти в каждую подпрограмму огромного 120тысяче-спрочного сорса и сидит в отдельном include file. GNU компилер не делает массив MYS(100) статическим и аллоцирует его от балды в каждой подпрограмме, а по идеологии оно должно быть одно для всех. Я хотел положить в коммон блок этот массив, но почему-то компиллер ругается на COMMON /MY_MYS/ MYS и не дает компилить схожие вариации... Забыл я фортран, а такими извращениями и никогда не пользовался, а хотелось бы быстро попробовать стоит ли мне этот огромадный софт прикручивать... Вдруг кто помнит, обгуглился уже на на эту тему и всех кого можно было спросил и никто не помнит или не знает, но вдруг здесь кто помнит и подскажет, пожалуйста, подсобите! Спасибо!!! ИИВ Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Rst7 5 22 октября, 2017 Опубликовано 22 октября, 2017 · Жалоба Я бы посоветовал обернуть этот массив структур в MODULE name. И, соответственно, в каждом сорце сделать USE name. Так вроде более кошерно для F90. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
iiv 13 22 октября, 2017 Опубликовано 22 октября, 2017 · Жалоба Я бы посоветовал обернуть этот массив структур в MODULE name. И, соответственно, в каждом сорце сделать USE name. Так вроде более кошерно для F90. спасибо! Да, верно, я сначала тоже так хотел, но прикидочно это - неделя работы, ибо этот гребанный инклюд (вернее их у меня 9 штук однотипных) втыкается почти в каждую подпрограмму, а слово include в сорсе встречается примерно 10 тысяч раз. Мне же таки хотелось бы намудрить только в инклюде что-то, чтобы не трогать сами сорсы... Понятно, если другого решения не будет, то сделаю именно так, но больно уж много глупой работы получается. EDIT: я всегда знаю длину массива структуры, и могу положить массив integer такого же размера в какой-то коммон-блок, но почему-то EQUIVALENCE тоже не хочет работать... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Rst7 5 22 октября, 2017 Опубликовано 22 октября, 2017 · Жалоба Так, а расскажите подробнее структуру сорсов. Как и где что инклудится сейчас. И чем оно вообще раньше компилилось? EDIT: я всегда знаю длину массива структуры, и могу положить массив integer такого же размера в какой-то коммон-блок, но почему-то EQUIVALENCE тоже не хочет работать... EQUIVALENCE - это ж вроде исключительно локальное дело. Из него не получится глобальную переменную построить. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
iiv 13 22 октября, 2017 Опубликовано 22 октября, 2017 · Жалоба . Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
iiv 13 22 октября, 2017 Опубликовано 22 октября, 2017 · Жалоба а ларчик-то просто открывался... TYPE, BIND(C):: STRUCT_MYS REAL*8 A LOGICAL D ... END TYPE TYPE (STRUCT_MYS) :: MYS(100) COMMON /MY_MYS/ MYS SAVE /MY_MYS/ всем большущее спасибо за обсуждение! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться