Статическая библиотека с объектными файлами с одинаковыми именами, содержащими статические переменные с одинаковыми именами. - PullRequest
3 голосов
/ 15 марта 2019

Допустим, у нас есть это исходное дерево:

.
└── 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)

Разница в том, что содержимое может конфликтовать.

1 Ответ

2 голосов
/ 15 марта 2019

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

Конфликта не будет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...