11

尝试在 Mac OS Sierra 上使用 LLVM 4.0.0 版本(Clang,LLD)链接一个简单的程序。请注意,这在 Linux 中完全可以实现。

我当前的路径以 LLVM 的bin目录为前缀(即/opt/LLVM/4.0.0/bin:$PATH.

程序 ( main.cpp) 是最简单的 C++ 应用程序:

int main()
{
    return 0;
}

发出的 shell 命令是:clang -fuse-ld=lld.
这失败并出现以下错误:

/opt/llvm/4/bin/ld.lld: error: unknown argument: -no_deduplicate
/opt/llvm/4/bin/ld.lld: error: unknown argument: -dynamic
/opt/llvm/4/bin/ld.lld: error: unknown argument: -arch
/opt/llvm/4/bin/ld.lld: error: unknown emulation: acosx_version_min
/opt/llvm/4/bin/ld.lld: error: unable to find library -lto_library
/opt/llvm/4/bin/ld.lld: error: /opt/llvm/4/lib/libLTO.dylib: invalid data encoding
clang-4.0: error: linker command failed with exit code 1 (use -v to see invocation)

使用-v开关,我看到了这个链接器命令(格式化):

"/opt/llvm/4/bin/ld.lld" \
    -demangle \
    -lto_library /opt/llvm/4/lib/libLTO.dylib \
    -no_deduplicate \
    -dynamic \
    -arch x86_64 \
    -macosx_version_min 10.12.0 \
    -o a.out \
    main.o \
    -lSystem /opt/llvm/4/bin/../lib/clang/4.0.0/lib/darwin/libclang_rt.osx.a

有谁知道这个平台的正确开关?

4

2 回答 2

1

如果使用 LLVM-lld 的唯一原因是速度,那么试试 zld

与 Apple-ld 相比,它始终将时间缩短一半(通常不到一半)。

添加以下链接器标志:

-fuse-ld=`which zld` -Wl,-zld_original_ld_path,ld 
于 2020-10-14T14:27:13.363 回答
1

在联系 LLVM-dev 邮件列表后,用于 macOS(意思是,Mach-O 对象格式链接)开发的 LLD 似乎已过时。

要在 macOS 上使用 Clang,最好坚持使用 OS 提供的ld64.

于 2018-03-15T23:00:45.630 回答