Подтвердить что ты не робот

Скомпилировать автономный статический исполняемый файл

Я пытаюсь скомпилировать исполняемый файл (файл ELF), который не использует динамический загрузчик. Я построил кросс-компилятор, который компилирует mips из linux для использования на симуляторе, который я сделал. Я утверждал флаг -static-libgcc при компиляции моего файла hello.cpp(hello world program). По-видимому, этого недостаточно. Поскольку в моем исполняемом файле все еще есть сегмент, который содержит имя/путь динамического загрузчика. Какие флаги я использую для создания исполняемого файла, который содержит ВСЕ, нужно ли запускать? Нужно ли мне перестроить мой кросс-компилятор?

4b9b3361

Ответ 1

Попробуйте использовать флаг -static?

Ответ 2

Используйте следующие флаги для связывания

-static -static-libgcc -static-libstdc++

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

Проверьте, действительно ли он работал

  • Убедитесь, что динамическая привязка действительно отсутствует

    ldd yourexecutable
    

    должен возвращать "не динамический исполняемый файл" или что-то эквивалентное.

  • Убедитесь, что не осталось неразрешенных символов

    nm yourexecutable | grep " U "
    

    Список должен быть пустым или содержать только некоторые специальные символы пространства ядра, такие как

    U __tls_get_addr
    
  • Наконец, проверьте, действительно ли вы можете выполнить свой исполняемый файл