Недавно я перенес некоторый код (около 200 строк). Он модифицирует 2 исполняемых файла и libConfig, но изменения libConfig не влияют на интерфейсы.
Я перекомпилировал и отличился от предыдущей версии. Как и ожидалось, два исполняемых файла и библиотека конфигурации имеют разный размер. Но ряд других библиотек и исполняемых файлов демонстрируют двоичные различия, в то время как размер файла остается прежним.
Я подумал, что это, вероятно, искусственные изменения, поэтому я обновил два исполняемых файла и библиотеку конфигурации до более старой версии.
Когда я запускаю программное обеспечение, третий исполняемый файл не выполняет проверку во время выполнения, жалуясь, что файл конфигурации не загружен. Ни одно из изменений не имеет никакого отношения к этому исполняемому файлу или файлу конфигурации, на который он жалуется.
Изменить:
Среда
Среда та же самая. Компилятор, сторонние зависимости, файлы/флаги сборки и т. д. одинаковы.
В libConfig.so была добавлена структура, но эта структура не связана с неисправным исполняемым файлом.
Компилятор
Я выполняю кросс-компиляцию на x86_64 для ARM64 с использованием gcc.
Флаги компилятора: довольно стандартно:
Код: Выделить всё
-std=c++17 -fPIC -Wall -sharecd -c -pipe -march= --sysroot= -MMD -MP -Werror=return-type -O2
Я заметил вот что:
Код: Выделить всё
/lib/ld-linux-aarch64.so.1 .........GNU ...
Может ли кто-нибудь объяснить такое поведение?
- Почему в моей новой сборке происходят двоичные изменения, хотя их не должно быть?
- Почему неизмененный исполняемый файл внезапно выдает ошибку?
/> - Вызывает ли проблему libConfig.so? Если да, то почему?
Подробнее здесь: https://stackoverflow.com/questions/797 ... ld-be-none
Мобильная версия