Как связать скомпилированный объектный файл (hello.o) с ld на Mac OS X?

у меня проблема с объективными файлами ссылок на Mac OS X. трассировка проблемы, вот моя программа c hello world

#include <stdio.h>
int main(){
    printf("Hello, world!n");
    return 0;
}

//Compile с GCC (компилятор Clang LLVM на mac)

$ gcc -c hello.c

выходной файл-hello.о ссылка с gcc и запуск исполняемого файла -

$ gcc hello.o -o hello
$ ./hello

теперь я должен использовать программу компоновщика mac ld или Ld для связывания объективных файлов вместо gcc. В этом случае какие аргументы я должен передать в программу ld по порядку чтобы запустить программу? Простой проход в имени файла объекта, т. е.

$ ld Здравствуйте.o

в результате

ld: warning: -macosx_version_min not specified, assuming 10.6
Undefined symbols for architecture x86_64:
    "_printf", referenced from:
     _main in hello.o
    "start", referenced from:
    implicit entry/start for main executable
ld: symbol(s) not found for inferred architecture x86_64

Итак, какие еще файлы мне нужно включить для ссылки или информации об архитектуре, которую мне нужно указать? Спасибо.

2 ответов


хорошо, у меня тоже был этот вопрос. Да, причина ошибок компоновщика заключается в том, что вам нужно кормить его всеми волшебными аргументами, которые делает gcc. И простой способ обнаружить их-вызвать -v опция on gcc чтобы выявить все команды, выполняемые на этапах компиляции. В вашем случае запустите:

gcc hello.o -o hello -v

...выход которого в моей системе заканчивается строкой:

/usr/libexec/gcc/i686-apple-darwin9/4.2.1/collect2 -dynamic -arch i386 -macosx_version_min 10.5.8 -weak_reference_mismatches non-weak -o test -lcrt1.10.5.o -L/usr/lib/i686-apple-darwin9/4.2.1 -L/usr/lib/gcc/i686-apple-darwin9/4.2.1 -L/usr/lib/gcc/i686-apple-darwin9/4.2.1 -L/usr/lib/gcc/i686-apple-darwin9/4.2.1/../../../i686-apple-darwin9/4.2.1 -L/usr/lib/gcc/i686-apple-darwin9/4.2.1/../../.. test.o -lgcc_s.10.5 -lgcc -lSystem

Я не знаю collect2 программа есть, но если вы кормите все это аргументы ld он должен работать так же (по крайней мере на моей системе).


для справки, мои полные параметры компоновщика -

ld -demangle -dynamic -arch x86_64 
-macosx_version_min 10.9.0 
-o hello
-lSystem /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../lib/clang/5.0/lib/darwin/libclang_rt.osx.a