[MSVC] ODR - как заставить соблюдать?

erotic

Я уже просто в ауте - целый день искал, почему долбанная программа вылетает - и что же выясняется:
использовалась либа и хедер к ней, при чем в хедере определялся класс не так, как он был определен при компилировании либы. Но дело касалось только приватных членов, т.ч. интерфейс остался тот же. В итоге долбанная программа собиралась и работала, но при уничтожении объекта этого класса вылетала с ошибкой памяти. Линкер ничего не говорил
Можно настроить линкер соблюдать ODR?

tamusyav

А причем здесь ODR? Оно вроде касается только компилятора, или я что-то путаю?
Проблема, имхо, решается только изменением хедера. Не думаю, что линкер в состоянии вытащить из либы полное описание класса. Но даже если в состоянии, то он не будет этого делать, потому что изменение способов доступа к полям класса не в его компетенции.

erotic

ODR - дело исключительно линкера. Компилятору пох, что компилить, и он в принципе не знает, что у тебя в другой единице трансляции.
Не думаю, что линкер в состоянии вытащить из либы полное описание класса. Но даже если в состоянии, то он не будет этого делать, потому что изменение способов доступа к полям класса не в его компетенции.

Все-таки, я думаю, он может найти некоторые несоответствия. Хотя - хз. Не знаю, как у других линкеров с этим.

tamusyav

Какую-то часть информации о классе линкер пихает в его имя. Если различия это не затрагивают, то линкер ругаться не будет, поскольку он в принципе не способен увидеть эти различия. Откуда ему знать, например, что в 16-19 байтах класса хранится целое число? На всякие там приватности, друзей и т. п. он тоже не обратит внимания.

erotic

Ну, скажем, где-то генерится конструктор, его код зависит от списка членов класса в частности. В моем случае - это был разный список, значит, должны были генериться разные конструкторы, и на это компоновщик должен был ругаться. ИМХО.

smit1

>В моем случае - это был разный список, значит, должны были генериться разные конструкторы
Набор параметров у конструкторов одинаковый? Остальное линкер ниибёт.

tamusyav

Набор параметров у конструкторов одинаковый?
Если конструкторы инлайновые, то и это не важно.

erotic

Блин, как все запущено...
Оставить комментарий
Имя или ник:
Комментарий: