我想運行一個基本的程序集文件使用64位Mac OS X的獅子,使用默認情況下與Xcode安裝的nasm和ld。無法鏈接彙編文件在Mac OS X中使用ld
我寫了一個程序集文件,它打印出一個字符,然後用它來建立使用nasm。
nasm -f elf -o program.o main.asm
然而,當我去給它使用ld鏈接時,出現了不少錯誤/警告:
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
所以,我試圖糾正幾個這些問題,並沒有得到。
這裏是我試過的事情之一:
ld -arch i386 -e _start -o program program.o
我本以爲這工作,但我錯了。
如何使目標文件成爲nasm和ld將會同意的兼容體系結構?
還有,你怎麼會在程序中定義的入口點(現在我使用global _start
在.section text
,高於_start
,這似乎並沒有多大作用。)
我是有點困惑,你如何成功地將一個目標文件鏈接到一個使用ld的二進制文件,我想我只是缺少一些代碼(或者對nasm或ld的參數),這將使他們同意。
任何幫助表示讚賞。
您是否嘗試過使用gcc而不是ld進行鏈接?它通常容易得多,您可以使用C運行時和標準庫(例如,以'main'作爲入口點)。另一個嘗試是使用'mach'目標文件格式而不是'elf'。 – user786653