Я собираю некоторый код C ++ в библиотеку. Предположим, мои исходные файлы mylib.cpp
и util.cpp
. Код в util.cpp
используется в реализации библиотеки, но не является частью библиотеки в том смысле, что код, использующий библиотеку, не может вызвать его (он не находится в заголовках publi c) и не должен знать о его существовании ; но my_lib.cpp
включает util.hpp
и полагается на скомпилированный объектный код util.cpp
.
Теперь, если я скомпилирую mylib.o
и util.o
, выполните:
ar qc libmylib.a mylib.o util.o
моя библиотека работает нормально; но - код утилиты представлен в виде символов. Таким образом, если я свяжу эту библиотеку с другим кодом, могут возникнуть конфликты двойных определений. Или этот другой код может неоправданно полагаться на доступность символов (например, с собственным заголовком).
Как я могу гарантировать, что только объектный код в mylib.o
(и в util.o
) "видит" символы из util.o
, в то время как внешний код не имеет?
Примечание: я полагаю, что этот вопрос относится также к C и, возможно, к другим скомпилированным языкам.