Если вы определили main
в сборке
Ответ Мэтью отлично справляется с изложением минимальных требований.
Позвольте мне показать вам, как найтиэти пути в вашей системе.Выполните:
gcc -v hello_world.c |& grep 'collect2' | tr ' ' '\n'
и затем выберите файлы, упомянутые Мэтью.
gcc -v
дает точную команду компоновщика, которую использует GCC.
collect2 является внутренним исполняемым GCC, используемым в качестве внешнего интерфейса компоновщика, который имеет интерфейс, аналогичный ld
.
В 64-битной Ubuntu 14.04 (GCC 4.8) я получил:
ld -dynamic-linker /lib64/ld-linux-x86-64.so.2 \
/usr/lib/x86_64-linux-gnu/crt1.o \
/usr/lib/x86_64-linux-gnu/crti.o \
-lc hello_world.o \
/usr/lib/x86_64-linux-gnu/crtn.o
Вам также могут понадобиться -lgcc
и -lgcc_s
.См. Также: Действительно ли мне нужна libgcc?
Если вы определяете _start
в сборке
Если я определил _start
,Привет мир из glibc работал только с:
ld -dynamic-linker /lib64/ld-linux-x86-64.so.2 -lc hello_world.o
Я не уверен, что это надежно, то есть, если инициализации crt
можно безопасно пропустить для вызова функций glibc.См. Также: Почему программа сборки работает только тогда, когда связаны с crt1.o crti.o и crtn.o?