Я использую lib.exe для создания библиотеки из скомпилированных объектов Fortran (древний F77 с использованием компилятора Intel 18). Фортран имеет повторяющиеся общие блоки разного размера. Он также имеет дублирующие методы. Это унаследованный код с неуклюжей перегрузкой.
Для повторяющегося метода lib.exe всегда берет метод из первого объекта.
Для дубликата общего блока он берется из последнего объекта в common.lib.
Lib.exe /OUT:target.lib pmk.obj lib.exe target.lib common.lib
Общие блоки отличаются только размером массива, например.
ОБЩИЙ /CPSTKC/ ИСТАК (6 200)
Против
ОБЩИЙ /CPSTKC/ ИСТАК (6,15)
А мне нужен больший.
Я не могу просто изменить порядок lib.exe, так как тогда он использует неправильный метод. Также я не хочу трогать common.lib, если могу, но pmk.f — честная игра.
Как я могу понять, что здесь происходит, чтобы я мог заставить его вести себя?
1 ответ
Из-за своего статуса я не могу комментировать, но поскольку больше никто не вмешался, вот что я думаю. У вас есть блоки BLOCKDATA (это инициализирует Commons) в этой программе? Если нет, вы можете добавить это в конец вашей основной программы или создать отдельно. Это может указать форму/размер хранилища массивов. Поскольку они не являются исполняемыми, их нельзя связать из библиотеки, поэтому они должны быть связаны с чем-то явно на этапе связывания, что может упростить их размещение в основном модуле. Вы получаете преимущество явной и перед любыми исполняемыми операторами инициализации общих данных (общий источник ошибок).
Кстати, повторяющиеся методы, о которых вы упоминаете, звучат очень рискованно и зависят от компилятора/компоновщика/версии. (общий псевдоним в меньшей степени, так как я думаю, что он был указан по крайней мере в F77 stds, если не позже) зачем вам один и тот же метод в одной и той же кодовой базе дважды?
Похожие вопросы
Новые вопросы
fortran
Fortran — это процедурный императивный язык программирования общего назначения, который особенно подходит для числовых вычислений и научных вычислений. С 2003 года стандартный Фортран также поддерживает объектно-ориентированное программирование. Fortran 2008 представил комассивы для параллельного программирования SPMD. Этот тег следует применять ко всем вопросам о языке Fortran; другие специальные теги могут быть добавлены для компиляторов, версий языка и конкретных аспектов использования.