Próbuję skompilować plik wykonywalny (plik ELF), który nie korzysta z dynamicznego programu ładującego. Zbudowałem krzyżowy kompilator, który kompiluje mipsy z Linuxa do użycia na symulatorze, który zrobiłem. Podałem flagę -static-libgcc w kompilacji mojego pliku hello.cpp (hello world program). Najwyraźniej to jednak nie wystarczy. Ponieważ w moim pliku wykonywalnym nadal znajduje się segment zawierający nazwę/ścieżkę dynamicznego programu ładującego. Jakich flag używam do generowania pliku wykonywalnego, który zawiera WSZYSTKO potrzebne do uruchomienia? Czy muszę odbudować mój kompilator krzyżowy?Skompiluj samodzielny statyczny plik wykonywalny
Odpowiedz
Spróbuj użyć flagi -static
?
Użyj następujących flagi do łączenia
-static -static-libgcc -static-libstdc++
Te trzy flagi połączyć przeciwko statycznych wersji wszystkich zależnościach (GCC założeniu). Zauważ, że w niektórych sytuacjach niekoniecznie potrzebujesz wszystkich trzech flag, ale one też nie "ranią". Dlatego po prostu włącz wszystkie trzy.
Sprawdź, czy to faktycznie przepracowanych
Upewnij się, że naprawdę nie ma dynamiczny podnośnik
ldd yourexecutable
powinien wrócić „Nie dynamiczny wykonywalny” lub coś równoważne.
Upewnij się, że nie istnieją nierozwiązane symbole lewej
nm yourexecutable | grep " U "
lista powinna być pusta lub może zawierać tylko niektóre symbole specjalne kernel-space jak
U __tls_get_addr
Na koniec sprawdź, czy może faktycznie wykonać swój plik wykonywalny
To powinna być zaakceptowana odpowiedź! –
- 1. Skompiluj skrypt R w samodzielny plik .exe?
- 2. Qt utworzyć plik wykonywalny
- 3. Plik wykonywalny zawierający dane
- 4. Plik statyczny routingu MVC
- 5. Uruchom plik wykonywalny z makefile
- 6. Plik statyczny kolby Cache-Control
- 7. Domyślnie obsługuj plik statyczny index.html.
- 8. requirejs załaduj statyczny plik JSON
- 9. Jak utworzyć samodzielny, samodzielny program instalacyjny napisany w języku C#?
- 10. Jak utworzyć samodzielny exe za pomocą AutoHotkey?
- 11. Skompiluj plik binarny do łączenia OSX
- 12. Skompiluj jeden plik w QT Creator
- 13. Skompiluj plik Java ... za pomocą programu Java
- 14. Skompiluj jeden plik w projekcie CMake?
- 15. Dlaczego mój utworzony plik wykonywalny programu Pyinstall wymaga uprawnień administratora?
- 16. Kiedy dokładnie DLL używa innej sterty niż plik wykonywalny?
- 17. Jak mogę przetestować samodzielny skrypt Perla?
- 18. Jak ukryć plik wykonywalny ze skryptu bash?
- 19. Jak wykonać plik wykonywalny z kamieniami ruby
- 20. Pakowanie programu Jython w plik wykonywalny
- 21. Plik wykonywalny Ruby Thor z przestrzeniami nazw
- 22. Jak znaleźć aktualnie działający plik wykonywalny PHP?
- 23. Jak wysłać plik wykonywalny z językiem.Haskell.Interpreter?
- 24. Jak zrobić plik wykonywalny za pomocą maven?
- 25. Plik wykonywalny debugowania z argumentami w IDA
- 26. Gdzie jest plik wykonywalny Cmake na Ubuntu
- 27. Plik wykonywalny, z którego uruchamiana jest aplikacja?
- 28. Jak uruchomić plik wykonywalny za pomocą Lua?
- 29. Jak utworzyć plik wykonywalny z jarami zależności
- 30. Jak utworzyć plik wykonywalny dla aplikacji Qt?
Czy istnieje dobry opis zasobu dokładny wynik każdej z flag gcc? Nie jestem w 100% pewien, czy wyłączam dynamiczne ładowanie, czy nie. Kiedy używam -static nadal mam nazwę dynamicznego programu ładującego umieszczonego w mojej sekcji .interp pliku elf. –
http://gcc.gnu.org/onlinedocs/gcc/Option-Index.html Kiedyś pisałem system operacyjny, który ładuje pliki wykonywalne elfa i mogę potwierdzić, że flaga -statyczna flaga działa, po prostu zignoruj rzeczy związane z LD i przeskocz bezpośrednio do punktu wejścia do pliku wykonywalnego – Tomaka17
Przeczytałem coś o użyciu opcji konfiguracyjnej "-disable-shared". Czy nie jest to konieczne, aby skompilować samodzielny plik wykonywalny? –