我试图发送一个简单的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最初寻找link.exe来生成可执行文件。
它不支持Linker脚本。
所以对于-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我应该如何写一个命令,这样我才能得到一个内存映射文件,同时我可以传递链接脚本?
请帮我解决问题。
发布于 2019-08-15 15:58:39
您在这里所写的链接器标志:
-Wl,-Map,output.map应该是
-Wl,-Map=output.map发布于 2021-03-22 14:00:07
您必须使用与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我不能尝试这个,因为我没有链接脚本。您可以尝试更改目标三重。
https://stackoverflow.com/questions/57370682
复制相似问题