Разумно ли ожидать двух общих библиотек, построенных на двух одинаковых платформах?

Если я создаю один и тот же исходный код, то ссылаюсь на одну и ту же версию тех же библиотек, с той же цепочкой инструментов (тот же компилятор, компоновщик и т. Д., GCC 4.4), с той же версией той же операционной системы (Centos 5 Linux в моем дело) но на двух разных машинах;

Разумно ли предполагать, что создаваемые двоичные файлы должны быть идентичными?

В этом контексте мой код имеет «неопределенное поведение», которое «работает» на одной конфигурации, но не на другой, очевидный ответ — это исправить это, но мне было бы интересно узнать, если мое предположение о том, что создаваемые двоичные файлы должны быть идентичны, правильный.

Я заметил разницу в размере в несколько сотен байтов, расположение символов, показанных с помощью команды «nm», немного отличается, даже если символы одинаковы.

3

Решение

Обычно я ожидаю, что дата и / или метаданные будут немного отличаться даже между сборками на одном хосте.

Вы также забыли упомянуть флаги компилятора, (оптимизация и #defines из командной строки, например).

Однако я изначально подозреваю, что файлы должны иметь одинаковый размер, что приводит нас к выводу, что что-то является не то же самое в двух системах. Наиболее вероятными кандидатами являются системные заголовки (только одна функция корневого уровня в установке ОС может привести к совершенно другому виду этих файлов) и любые зависимые библиотеки.

Вы можете проверить, что заголовки одинаковы, предварительно обработав g++ -E или похожие. Вы также можете перейти по пути к библиотеке и подтвердить, что связанные файлы идентичны в каждой системе.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]