Załóżmy, że masz łańcuch narzędzi do kompilacji krzyżowej, który tworzy pliki binarne dla architektury ARM.Jakie są różnice między kompilacją C/C++ bare-metal a kompilacją dla określonego systemu operacyjnego (Linux)?
Twój narzędzie łańcuch jest tak (uruchomiony na komputerze z systemem Linux x86_64):
- arm-linux-gnueabi-gcc.exe: do cross-kompilacji dla Linux działa na ARM.
- arm-gcc.exe: w przypadku kierowania na krzyżyk w systemie ARM.
... i mnóstwo innych narzędzi do kompilacji krzyżowej na ARM.
Punkty że jestem zainteresowany to:
- różnice (E) ABI między plików binarnych (jeśli występują)
- ograniczenia w przypadku gołego metalu (jak alokacji pamięci dynamicznej, korzystanie z konstruktorów statycznych w przypadku C++, modelowania wątków itp.)
- różnice poziomu binarnego między 2 przypadkami pod względem informacji specyficznych dla każdego z nich (np. obsługa informacji debugowania itp.);
To brzmi jak "różnica między moim małym programem a moim systemem operacyjnym" ... – deviantfan
@deviantfan: Brzmi bardziej jak "Czy mogę używać wszystkich" normalnych "funkcji C/C++, do których jestem przyzwyczajony do oprogramowania (bare-metal) rozwoju? " Po przeczytaniu tego artykułu tutaj: http://www.state-machine.com/arm/Building_bare-metal_ARM_with_GNU.pdf Zauważyłem pewne ograniczenia bare-metalu C/C++. Czy są jeszcze jakieś (i różnice)? :) – Liviu
Dla * prawdziwego gołego metalu *, musisz napisać warstwę przenośności dla * newlib *. W systemie Gnu Linux: * eglibc * lub [* glibc *] (http: //en.wikipedia.org/wiki/GNU_C_Library). Zasadniczo, twoje pytanie brzmi, jaka jest różnica. Istnieje 1000s. Czy chcesz użyć 'mmap()'? Itd. Różnice binarne/kompilatora nie mają znaczenia (głównie). To biblioteki "C" są zupełnie inne. Plik we/wy? –