Я разрабатываю программу 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 могут содержать (и использовать) разные версии одних и тех же объектных файлов?