macOSでのアセンブリ言語のリンクエラー
翔泳社の『低レベルプログラミング』の中にあるソースコードがmacのターミナルでリンクしようとするとエラーが出てしまいました。この本のGithubのページを見ながら書き方や環境設定を試してみましたが、どうにも解決しなかったので知恵を貸して頂きたいです。
『低レベルプログラミング』のGithub: https://github.com/Apress/low-level-programming
発生している問題・エラーメッセージ
% nasm -fmacho64 hello.asm && ld hello.o && ./a.out Undefined symbols for architecture x86_64: "_main", referenced from: implicit entry/start for main executable ld: symbol(s) not found for architecture x86_64
該当のソースコード
x64
1 global start 2 3 section .text 4start: mov rax, 0x02000004 5 mov rdi, 1 6 mov rsi, message 7 mov rdx, 13 8 syscall 9 mov rax, 0x02000001 10 xor rdi, rdi 11 syscall 12 13 section .data 14message: db "Hello, World", 10
試したこと
もともと_startになっていたものをstartに直したり, mainや_mainにして見ました。
補足情報(FW/ツールのバージョンなど)
mid-2012 13inch macbook air
intel core i5
macOS Catalina version 10.15.1
NASM version 2.14.02 compiled on Sep 28 2019
追記
######otnさん
2019/11/03 00:50
_mainにして見ました。
startは2か所ありますが、両方 _main にしましたか?
両方_mainにしたら
ld: dynamic main executables must link with libSystem.dylib for architecture x86_64
という別のエラーメッセージになりました。リンクと実行は
% nasm -fmacho64 hello.asm && ld hello.o && ./a.out
のままです。ご指摘ありがとうございます。
######asmさん
2019/11/03 01:20
githubには
Linking: ld -macosx_version_min 10.7.0 -lSystem -o hello_world
と書かれていましたがこのオプションは試しましたか?
そのオプションでリンクしようとしたら
ld: warning: -arch not specified ld: warning: ignoring file /usr/lib/libSystem.dylib, missing required architecture unknown in file /usr/lib/libSystem.dylib (2 slices) Undefined symbols for architecture unknown: "start", referenced from: implicit entry/start for main executable ld: symbol(s) not found for architecture unknown
というメッセージに変わりました。ちなみに中身のstart
だった2箇所はotnさんの指摘を受けて両方とも_main
に変えました。ご指摘ありがとうございます。
回答2件
あなたの回答
tips
プレビュー