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