Перейти к содержимому
IMOEX 2165.54 2.1%
·Технологии·27 июля 2026 г.

Виды связываний (external, internal, no linkage) для самых маленьких

Виды связываний (external, internal, no linkage) для самых маленьких

Если вы когда-нибудь собирали проекты на C++, то практически наверняка получали ошибку от линковщика формата:

/usr/bin/ld: /tmp/ccYa2eaO.o: в функции «foo()»: foo.cpp:(.text+0x0): повторное определение «foo()»; /tmp/ccKEs5I7.o:main.cpp:(.text+0x0): здесь первое определение collect2: error: ld returned 1 exit status

Опытным C++ разработчикам эта проблема известна как ODR (One Definition Rule). Но корень этой ошибки выходит далеко за рамки «используй inline в .hpp» и «не определяй ничего в .hpp».

В этой небольшой статье мы попробуем разобраться, как наши объектные файлы, которые мы создаем, видит линковщик и другие единицы трансляции, и при чём здесь таблица символов.

Это отрывок статьи. Полную версию читайте на сайте источника по ссылке ниже.

Источник: Habr