Próbuję uruchomić podstawowy plik zespołu przy użyciu 64-bitowego Mac OS X Lion, używając nasm i ld, które są domyślnie instalowane z Xcode.Nie można połączyć pliku zestawu w systemie Mac OS X przy użyciu ld
Napisałem plik zespołu, który wypisuje postać, i mam ją do zbudowania przy użyciu nasm.
nasm -f elf -o program.o main.asm
Jednak, kiedy idę do łączenia go z LD, nie jest on z dość kilka błędów/ostrzeżeń:
ld -o program program.o
ld: warning: -arch not specified
ld: warning: -macosx_version_min not specificed, assuming 10.7
ld: warning: ignoring file program.o, file was built for unsupported file format which is not the architecture being linked (x86_64)
ld: warning: symbol dyld_stub_binder not found, normally in libSystem.dylib
ld: entry point (start) undefined. Usually in crt1.o for inferred architecture x86_64
Więc starałem się naprawić kilka z tych problemów i nigdzie nie doszło.
Oto jedna z rzeczy Próbowałem:
ld -arch i386 -e _start -o program program.o
Które myślałem, że działa, ale myliłem się.
W jaki sposób uczynić plik obiektowy zgodną architekturą, z którą zgadzają się nasm i ld?
także, w jaki sposób określić punkt wejścia w programie (teraz używam global _start
w .section text
, co jest powyżej _start
, które nie wydają się zrobić wiele dobrego.)
jestem trochę mylić, jak skutecznie połączyć plik obiektowy z plikiem binarnym za pomocą ld, i myślę, że po prostu brakuje mi jakiegoś kodu (lub argumentu do nasm lub ld), który sprawi, że się zgodzą.
Każda pomoc doceniona.
Czy próbowałeś łączenie za pomocą gcc zamiast LD? Często jest o wiele łatwiej i można używać środowiska wykonawczego C i biblioteki standardowej (np. Jako punkt wejścia należy 'main'). Inną rzeczą do wypróbowania jest użycie formatu pliku obiektów 'mach' zamiast' elf'. – user786653