Как запретить линкеру создавать бинарники с «weak» символами, неразрезолвленными ни одной из зависимостей?
Upd: судя по отписавшимся, да и по ощущениям, я плаваю в теме и не понял, что произошло. Поэтому опишу ситуацию.
- Плюсовый проект
- Собираем исполняемый файл
- В двух разных единицах трансляции, есть два класса с одинаковым именем, реализующих один интерфейс (базовый класс с vtable)
- Оба класса так же имеют статические методы и статические данные
- Оба обьектника линкуются в результирующий бинарь
Upd2: Однако, написал тестец. Скачать можно тут(и да, я не виртуал xaizek, просто он заботливо сохранил код, который профукал предыдущий файлообменник).
Код для воспроизведения проблемы:
tar xf test.tgz && cd test/; g++ -o test *.cpp \
&& nm --demangle test | grep Realization:: && ./test
Тобишь, код одной из реализаций в бинарь не попадает, что в принципе и логично, но почему линкер молча всё переписал, вместо того, чтобы крепко ругнуться, для меня загадка.