newsare.net
Если вы когда-нибудь собирали проекты на C++, то практически наверняка получали ошибку от линковщика формата:/usr/bin/ld: /tmp/ccYa2eaO.o: в функции «foo()»: foВиды связываний (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».В этой небольшой статье мы попробуем разобраться, как наши объектные файлы, которые мы создаем, видит линковщик и другие единицы трансляции, и при чём здесь таблица символов. Читать далее Read more











