использование внешних модулей в Фортране - PullRequest
1 голос
/ 06 июня 2011

Я пытаюсь использовать два внешних Fortran модуля, которые имеют одно и то же имя (в данном случае mod_param). Поэтому, когда я пытаюсь скомпилировать свой код, компилятор выдает следующую ошибку:

mod_param.o: в функции mod_param._': mod_param.f90:(.text+0x0): multiple definition of mod_param._ ' mod_param.o: mod_param.F90 :(. text + 0x0): сначала определено здесь

есть ли способ ее решить без переименования файла модуля и его имени? Я не предпочитаю переименование, потому что внешние модули поддерживаются кем-то другим, и я не хочу играть с ними. Для этого есть какое-то специальное заявление?

Ответы [ 2 ]

2 голосов
/ 06 июня 2011

В соответствии со стандартом F2003 имена модулей являются глобальными объектами и должны быть уникальными в программе, за исключением некоторых внутренних модулей.

Итак, это было бы нет (Кроме того, как бы вы сказали им, если бы они были одного и того же имени?)

2 голосов
/ 06 июня 2011

Нет.Необходимо изменить имя функции в исходном коде хотя бы в одном из модулей.

Поскольку код поддерживается кем-то другим, рассмотрите возможность автоматизации переименования: возможно, проект Makefile может запустить sed скрипт, который меняет имена функций.Чтобы зависимости были ясны, убедитесь, что в выводе сценария sed новое имя файла используется для компиляции - модуль virgin будет иметь имя файла, которое не скомпилировано или не связано с проектом.

Даже если бы можно было как-то связать их обоих с одним и тем же именем, как бы вы контролировали имя, которое было названо?

...