【发布时间】:2019-12-13 16:34:46
【问题描述】:
我正在尝试发送一个简单的 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 Linker 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
我应该如何编写一个命令,这样我才能获得一个内存映射文件,同时我可以传递链接器脚本?
请帮助我解决问题。
【问题讨论】:
-
我不熟悉 Windows 上的开发,但在 Mac 上,你传递的是
-map而不是-Map,也许同样适用于 Windows?不过,不确定链接器脚本。 -
是的,当我提供 -map 时,它会提供地图文件。但是当我与 llvm 链接器
lld链接时,似乎没有任何工作。我会收到上述错误。
标签: c windows clang linker-scripts lld