ld:找不到用于汇编的库“系统”

问题描述 投票:0回答:1

我正在尝试在 2020 intel macbook pro 上的 macos sonoma 14.3 上编写程序集,但它一直给我这个错误。 我的代码:

section .data
    msg: db "hello", 10
section .text
    global _main
_main:
    mov      rax, 0x02000004
    mov      rdi, 1
    mov      rsi, msg
    mov      rdx, 6
    syscall

    mov      rax, 0x02000001
    xor      rdi, rdi
    syscall

我在终端中运行这些。

nasm -f macho64 test.asm


ld test.o -o test -macos_version_min 14.3 -lSystem

我安装了命令行工具,当我再次尝试时: xcode-select:注意:命令行工具已安装。使用系统设置中的“软件更新”或softwareupdate命令行界面来安装更新(并且软件更新中没有更新)

我尝试将多个资源添加到路径中:

我的.zshrc:

export LIBRARY_PATH="$LIBRARY_PATH:/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/lib"

我的.z个人资料:

export SDKROOT=$(xcrun --sdk macosx --show-sdk-path) export LIBRARY_PATH="$LIBRARY_PATH:$SDKROOT/usr/lib"

我的.个人资料:

export SDKROOT=$(xcrun --sdk macosx --show-sdk-path) export LIBRARY_PATH="$LIBRARY_PATH:$SDKROOT/usr/lib"

在我的 .bash_profile 中我有两个命令

我安装了xcode。我不知道我是否需要其他东西,在互联网上没有找到任何其他想法

macos assembly linker nasm ld
1个回答
0
投票

我找到了一种方法,只需进行一些小更改即可使您发布的代码正常工作。

对于每次编译和链接尝试,我都使用此命令,其中源代码位于名为

so_hello.asm
:

的文件中
nasm -f macho64 so_hello.asm && ld -macos_version_min 14.0  -o so_hello so_hello.o

从上面发布的代码开始,我收到了各种警告,如果我忽略它们并尝试运行链接器输出,我会收到总线错误。

使用我从 github gist comment 中拼凑出来的信息以及 nasm 教程中标题为 在 macOS 上使用 NASM 的部分,我决定让您的代码如下所示:

    default rel           ; add this line
section .data
    msg: db "hello", 10
section .text
    global _main
_main:
    mov      rax, 0x02000004
    mov      rdi, 1
    lea      rsi, [msg] ;always use lea to get your addresses
    mov      rdx, 6
    syscall

    mov      rax, 0x02000001
    xor      rdi, rdi
    syscall

现在工作得很好:

nasm -f macho64 so_hello.asm && ld -macos_version_min 14.0  -o so_hello so_hello.o
ld: warning: no platform load command found ..., assuming: macOS

./so_hello

hello

此外,如果我先这样做在英特尔架构下运行它,这也是可行的:

arch -x86_64 zsh

请注意,我是在 M3 上组装和链接

x86_64
代码的新手。我真的在寻找如何组装、链接和运行基于 Racket 的教程的编译器输出,该教程不直接支持
aarch64

仅供参考版本信息,以防您的输出有所不同:

  • OSX 14.4.1 (23E224)(索诺玛)
  • 列出项目
  • 罗塞塔2
© www.soinside.com 2019 - 2024. All rights reserved.