Допустим, у нас есть это исходное дерево:
.
└── src
├── foo
│ ├── common.c
│ └── foo.c
└── bar
├── common.c
└── bar.c
И в src/foo/common.c
, и в src/bar/common.c
у нас есть разные static
переменные с именами common_var
в обоих файлах, которые, очевидно, соответствуют различным переменным.
Все файлы будут скомпилированы в похожее дерево в tmp/
(включая tmp/foo/common.s
& tmp/bar/common.s
), позже собраны в объектные файлы (включая tmp/foo/common.o
& tmp/bar/common.o
), и все эти объектные файлы будут идти в lib/libfoobar.a
, который будет использоваться какой-то программой.
Окончание этого дерева файлов:
.
├── lib
│ └── libfoobar.a
├── src
│ ├── foo
│ │ ├── common.c
│ │ └── foo.c
│ └── bar
│ ├── common.h
│ └── bar.hpp
└── tmp
├── foo
│ ├── common.o
│ ├── common.s
│ ├── foo.o
│ └── foo.s
└── bar
├── common.o
├── common.s
├── bar.o
└── bar.s
Это нормально, или будет компилятор / компоновщик / любые проблемы?
Related: Статическая библиотека с объектными файлами с одинаковыми именами (ar)
Разница в том, что содержимое может конфликтовать.