Objective-C ma środowisko wykonawcze, które tłumaczy jego składnię na funkcje, które są zorganizowane i skompilowane. Czy C ma bibliotekę uruchomieniową? Ponadto, jeśli ktoś może odpowiedzieć na pytanie, jakie kroki podejmuje GCC podczas kompilacji C? na przykład main.c >> main.s >> main.binCzy język programowania C ma środowisko uruchomieniowe?
Odpowiedz
Tak, język C ma standardową bibliotekę; to jest wiele standardowych makr, procedur i typów, których można używać w jego programach, z wyjątkiem innych w samym języku podstawowym.
W popularnych implementacjach istnieje osobny plik biblioteki zawierający kod biblioteki standardowej C. Na przykład w środowiskach GNU/Linux biblioteka GNU C (libc
) jest prawie zawsze obecna. Firma Microsoft udostępnia bibliotekę środowiska wykonawczego msvcrt.dll
dla systemu Windows i tak dalej.
Ponadto standardowa biblioteka C może nie być dostępna w wolnostojących implementacjach. Czasami możliwe jest skompilowanie programu bez łączenia ze standardową biblioteką C z twojego systemu. Przykładowo, Windows API znany jest z tego, że zachowuje się jak wolnostojące środowisko programowania C (chociaż może być konieczne połączenie z innymi bibliotekami systemowymi specyficznymi dla systemu Windows).
odniesieniu do GCC, dodaje się na krótko zilustrowano przetwarzanie potokowe kompilacji:
- źródłem jest obróbce wstępnej GNU
cpp
, w wyniku czego jednostki translacji. (Faktycznie, jak Basile podkreślił, obecnie niecpp
proces jest tworzony; cała praca przerób odbywa się w ciągucc1
Niemniej otrzymany zachowanie jest najprawdopodobniej taka sama jak zcpp
.). - Jednostka tłumaczenie jest następnie interpretowany i skompilowane do źródła zestawu z GCC
cc1
; - Źródło zespołu jest następnie składane do kodu wynikowego za pomocą GNU
as
; - Wreszcie, pliki obiektów i biblioteki są połączone razem w celu utworzenia obrazu binarnego z GNU
ld
.
Oczywiście każdy z tych kroków może zostać zmieniony lub w ogóle nie wykonany, w zależności od opcji sterownika; powyższe stanowi jedynie przybliżone wyjaśnienie całego procesu.
To jest złe dzisiaj: z niedawnym GCC (nawet GCC z początku 2000), wstępne przetwarzanie i kompilacja odbywa się przez 'cc1' i nie ma już żadnego procesu' cpp' –
Dzięki za wyjaśnienie. Poprawię informacje. – alecov
C ma biblioteki standardowej (np strlen
, malloc
itd)
Kroki są: skompilować kod, który używa biblioteki standardowej, a następnie połącz swój kod z biblioteką standardową. libc
może znajdować się w bibliotece statycznej lub dynamicznej, w zależności od; zazwyczaj oba są dostępne.
C posiada standardową bibliotekę (libc
na Linuksie, który zapewnia standardowe funkcje, takie jak w <stdio.h>
takich jak fprintf
aw <stdlib.h>
takich jak malloc
a także wszystkich wywołań systemowych), a nawet podczas korzystania gcc
w wolnym trybie stałego z gcc -ffreestanding
(np. Aby skompilować libc
lub niektóre jądro) łączy małą bibliotekę libgcc
, która zapewnia funkcjonalność wbudowaną w język (np. Dodanie 64 bitów na 32-bitowych platformach).
Aby dowiedzieć się, co robi komenda gcc
, należy przekazać jej flagę -v
.(Nie zapomnij przyjąć nawyku, aby zawsze kompilować się z -Wall
, aby uzyskać ostrzeżenia i -g
, aby uzyskać informacje o debugowaniu), np.
% gcc -v -g -Wall hello.c -o hello
Using built-in specs.
COLLECT_GCC=gcc
COLLECT_LTO_WRAPPER=/usr/lib/gcc/x86_64-linux-gnu/4.7/lto-wrapper
Target: x86_64-linux-gnu
Configured with: ../src/configure -v --with-pkgversion='Debian 4.7.2-4' --with-bugurl=file:///usr/share/doc/gcc-4.7/README.Bugs --enable-languages=c,c++,go,fortran,objc,obj-c++ --prefix=/usr --program-suffix=-4.7 --enable-shared --enable-linker-build-id --with-system-zlib --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --with-gxx-include-dir=/usr/include/c++/4.7 --libdir=/usr/lib --enable-nls --with-sysroot=/ --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --enable-gnu-unique-object --enable-plugin --enable-objc-gc --with-arch-32=i586 --with-tune=generic --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu
Thread model: posix
gcc version 4.7.2 (Debian 4.7.2-4)
COLLECT_GCC_OPTIONS='-v' '-g' '-Wall' '-o' 'hello' '-mtune=generic' '-march=x86-64'
/usr/lib/gcc/x86_64-linux-gnu/4.7/cc1 -quiet -v -imultiarch x86_64-linux-gnu hello.c -quiet -dumpbase hello.c -mtune=generic -march=x86-64 -auxbase hello -g -Wall -version -o /tmp/ccsWt3UC.s
GNU C (Debian 4.7.2-4) version 4.7.2 (x86_64-linux-gnu)
compiled by GNU C version 4.7.2, GMP version 5.0.5, MPFR version 3.1.0-p10, MPC version 0.9
GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072
ignoring nonexistent directory "/usr/local/include/x86_64-linux-gnu"
ignoring nonexistent directory "/usr/lib/gcc/x86_64-linux-gnu/4.7/../../../../x86_64-linux-gnu/include"
#include "..." search starts here:
#include <...> search starts here:
/usr/lib/gcc/x86_64-linux-gnu/4.7/include
/usr/local/include
/usr/lib/gcc/x86_64-linux-gnu/4.7/include-fixed
/usr/include/x86_64-linux-gnu
/usr/include
End of search list.
GNU C (Debian 4.7.2-4) version 4.7.2 (x86_64-linux-gnu)
compiled by GNU C version 4.7.2, GMP version 5.0.5, MPFR version 3.1.0-p10, MPC version 0.9
GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072
Compiler executable checksum: c5f63dedeacd449634699df94fe3d914
COLLECT_GCC_OPTIONS='-v' '-g' '-Wall' '-o' 'hello' '-mtune=generic' '-march=x86-64'
as -v --64 -o /tmp/ccO5i3pU.o /tmp/ccsWt3UC.s
GNU assembler version 2.22 (x86_64-linux-gnu) using BFD version (GNU Binutils for Debian) 2.22
COMPILER_PATH=/usr/lib/gcc/x86_64-linux-gnu/4.7/:/usr/lib/gcc/x86_64-linux-gnu/4.7/:/usr/lib/gcc/x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/4.7/:/usr/lib/gcc/x86_64-linux-gnu/
LIBRARY_PATH=/usr/lib/gcc/x86_64-linux-gnu/4.7/:/usr/lib/gcc/x86_64-linux-gnu/4.7/../../../x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/4.7/../../../../lib/:/lib/x86_64-linux-gnu/:/lib/../lib/:/usr/lib/x86_64-linux-gnu/:/usr/lib/../lib/:/usr/lib/gcc/x86_64-linux-gnu/4.7/../../../:/lib/:/usr/lib/
COLLECT_GCC_OPTIONS='-v' '-g' '-Wall' '-o' 'hello' '-mtune=generic' '-march=x86-64'
/usr/lib/gcc/x86_64-linux-gnu/4.7/collect2 --sysroot=/ --build-id --no-add-needed --eh-frame-hdr -m elf_x86_64 --hash-style=both -dynamic-linker /lib64/ld-linux-x86-64.so.2 -o hello /usr/lib/gcc/x86_64-linux-gnu/4.7/../../../x86_64-linux-gnu/crt1.o /usr/lib/gcc/x86_64-linux-gnu/4.7/../../../x86_64-linux-gnu/crti.o /usr/lib/gcc/x86_64-linux-gnu/4.7/crtbegin.o -L/usr/lib/gcc/x86_64-linux-gnu/4.7 -L/usr/lib/gcc/x86_64-linux-gnu/4.7/../../../x86_64-linux-gnu -L/usr/lib/gcc/x86_64-linux-gnu/4.7/../../../../lib -L/lib/x86_64-linux-gnu -L/lib/../lib -L/usr/lib/x86_64-linux-gnu -L/usr/lib/../lib -L/usr/lib/gcc/x86_64-linux-gnu/4.7/../../.. /tmp/ccO5i3pU.o -lgcc --as-needed -lgcc_s --no-as-needed -lc -lgcc --as-needed -lgcc_s --no-as-needed /usr/lib/gcc/x86_64-linux-gnu/4.7/crtend.o /usr/lib/gcc/x86_64-linux-gnu/4.7/../../../x86_64-linux-gnu/crtn.o
Uwaga, collect2 jest łącznik owinięty zrobić dodatkowe rzeczy, i że libc.so
przyzwyczaja prawie każdy Linux wykonywalnego (bo jest owijanie syscalls).
- 1. Czy środowisko ASP.NET obsługuje język C++?
- 2. Tajemniczy język programowania
- 3. Język skryptowy PHP lub język programowania?
- 4. Czy język programowania Erlang a Constraint-Logic?
- 5. Język programowania do tworzenia DLL: C++ lub C#
- 6. . Język Java dla programowania jednoczesnego
- 7. Język programowania oparty na Unicode
- 8. Jak zaimplementować funkcjonalny język programowania?
- 9. PHP jako język programowania pulpitu
- 10. TCL jako język programowania po stronie serwera
- 11. Jaki był pierwszy język programowania z wyliczeniami?
- 12. Czy istnieje język programowania z semantyką zbliżoną do języka angielskiego?
- 13. Czy istnieje język programowania, który ma tylko moc deterministycznych automatów push-down, i nic więcej?
- 14. Jaki jest najlepszy język programowania uczenia maszynowego?
- 15. Najbardziej odpowiedni niezależny od platformy język programowania
- 16. Wpływ Lisp na język programowania czynnikowego?
- 17. Twój język programowania w przeglądarce (np. JavaScript)?
- 18. Czysty język programowania w świecie rzeczywistym?
- 19. Kryteria aby ustalić, czy jest to język programowania
- 20. Czy język vala to krzyżowy?
- 21. Niestandardowy język programowania (jar) w Androidzie
- 22. Zastosowanie ~ (tyldy) w programowania R Język
- 23. Jaki jest najbardziej zwięzły język programowania?
- 24. Prędkość różnych konstrukcji w językach programowania (Java/C#/C++/Python/...)
- 25. Inicjalizacja strukturalna języka programowania C/C++?
- 26. Który język programowania odpowiada krytycznemu rozwojowi aplikacji internetowych?
- 27. Nie ma czegoś takiego jak "język skompilowany" lub "język interpretowany"
- 28. Co to naprawdę oznacza, że język programowania nie ma żadnych powiązań?
- 29. Czy język C++ jest całkowicie obiektowy?
- 30. Jak uruchomić środowisko uruchomieniowe Nodejs na urządzeniach mobilnych z systemem Android lub iOS
http://pl.wikipedia.org/wiki/C_runtime –
Microsoft nazywa to runtime. http://msdn.microsoft.com/en-us/library/abx4dbyh(v=vs.110).aspx –
Wydaje się, że nie wiesz, co robi system runtime. Nie "tłumaczy [...] składni na funkcje"; to jest praca kompilatora. Środowisko wykonawcze w ObjC zapewnia przede wszystkim infrastrukturę obiektową: tworzenie klas, wysyłanie wiadomości i tak dalej. (Oczywiście są też inne elementy.) –