Я пытаюсь скомпилировать исполняемый файл (файл ELF), который не использует динамический загрузчик. Я построил кросс-компилятор, который компилирует mips из linux для использования на симуляторе, который я сделал. Я утверждал флаг -static-libgcc при компиляции моего файла hello.cpp(hello world program). По-видимому, этого недостаточно. Поскольку в моем исполняемом файле все еще есть сегмент, который содержит имя/путь динамического загрузчика. Какие флаги я использую для создания исполняемого файла, который содержит ВСЕ, нужно ли запускать? Нужно ли мне перестроить мой кросс-компилятор?
Скомпилировать автономный статический исполняемый файл
Ответ 1
Попробуйте использовать флаг -static
?
Ответ 2
Используйте следующие флаги для связывания
-static -static-libgcc -static-libstdc++
Используйте эти три флага для привязки к статическим версиям всех зависимостей (при условии gcc). Обратите внимание, что в определенной ситуации вам не обязательно нужны все три флага, но они также не "вредят". Поэтому просто включите все три.
Проверьте, действительно ли он работал
-
Убедитесь, что динамическая привязка действительно отсутствует
ldd yourexecutable
должен возвращать "не динамический исполняемый файл" или что-то эквивалентное.
-
Убедитесь, что не осталось неразрешенных символов
nm yourexecutable | grep " U "
Список должен быть пустым или содержать только некоторые специальные символы пространства ядра, такие как
U __tls_get_addr
-
Наконец, проверьте, действительно ли вы можете выполнить свой исполняемый файл