Я разрабатываю программу Fortran prog1
и две библиотеки Fortran, lib1
и lib2
. prog1
зависит от lib1
и lib2
, а lib1
также зависит от lib2
. Структура каталогов может выглядеть так:
prog1
|- lib2
|- lib1
|- lib2
В некоторых случаях мне бы хотелось prog1
использовать другую версию lib2
, отличную от той, которую использует lib1
. Однако, если статическая библиотека lib1.a
включает объектные файлы из lib2
, компоновщик выдает мне такие ошибки, как
./lib1/lib1.a(lib2_module.o): In function `__lib2_module_MOD_function1':
./lib2/src/lib2_module.f90:12: multiple definition of `__lib2_module_MOD_function1'
./lib2/lib2.a(lib2_module.o):./lib2/src/lib2_module.f90:12: first defined here
Другими словами, компоновщик сбивается с толку, поскольку обе библиотеки содержат один и тот же объектный файл lib2_module.o
, но с разными версиями.
Итак, мой вопрос: как две библиотеки Fortran могут содержать (и использовать) разные версии одних и тех же объектных файлов?
prog1
зависеть от другойlib1
версии? Если вы можете обойти это, ваша проблема может не существовать. - person steabert   schedule 08.02.2014lib1
использовать новую версиюlib2
, но все же разрешитьprog1
использовать старую версию, чтобы избежать (или отложить) ее изменение. Но использование той же версии, конечно, было бы самым простым решением. - person halvorlu   schedule 09.02.2014