LLD和链接描述文件

时间:2019-08-06 07:09:04

标签: c windows clang linker-scripts lld

我正在尝试为简单的c程序之一发送链接描述文件。 我在Ubuntu和Windows上都尝试过。

  
    

在Ubuntu上

  

经过研究,我发现它使用GNU-ld,因此使用clang命令行选项-fuse-ld=lld,所以现在我用clang默认链接器lld

链接

我尝试使用此命令

clang main.c -ffreestanding -nostartfiles -nodefaultlibs -fuse-ld=lld -Wl,-Map,output.map,-T Example_Linker.ld -o main

一切正常。 我得到了内存映射文件,还能够传递链接描述文件。

  
    

在Windows上

  

Clang最初会寻找Microsoft Visual Studio链接器link.exe来生成可执行文件。

它不支持链接描述文件。

使用-fuse-ld=lld

我尝试了以下命令
clang main.c -ffreestanding -nostartfiles -nodefaultlibs -fuse-ld=lld -Wl,-Map,output.map,-T Example_Linker.ld -o main

所以现在抛出了错误

clang: error: unknown argument: '-Map'
lld-link: warning: ignoring unknown argument: -T

我应该如何编写命令,以便能够获取内存映射文件并同时传递链接描述文件?

请帮助我解决问题。

2 个答案:

答案 0 :(得分:1)

您在此处编写的链接器标志:

$NewAcl = Get-Acl perm.txt
Get-ChildItem -Path "C:\Users\David\Scripts\test\videos" -Recurse -Filter "testing123" -File | Set-Acl -AclObject $NewAcl -WhatIf

应该是

    -Wl,-Map,output.map

答案 1 :(得分:0)

您必须使用与 Ubuntu 相同的目标三元组。

在我的 Ubuntu clang 上输出此信息:

$ clang-8 --version
clang version 8.0.0-3~ubuntu18.04.2 (tags/RELEASE_800/final)
Target: x86_64-pc-linux-gnu
Thread model: posix
InstalledDir: /usr/bin

因此您将在 Windows 上使用以下内容:

clang --target=x86_64-pc-linux-gnu main.c -ffreestanding -nostartfiles -nodefaultlibs -fuse-ld=lld -Wl,-Map=output.map,-T Example_Linker.ld -o main

我不能尝试这个,因为我没有链接描述文件。 您可以尝试更改目标三元组。