首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >LLD与链接器脚本

LLD与链接器脚本
EN

Stack Overflow用户
提问于 2019-08-06 07:09:04
回答 2查看 3.1K关注 0票数 1

我试图发送一个简单的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

所以现在抛出的错误是

代码语言:javascript
复制
clang: error: unknown argument: '-Map'
lld-link: warning: ignoring unknown argument: -T

我应该如何写一个命令,这样我才能得到一个内存映射文件,同时我可以传递链接脚本?

请帮我解决问题。

EN

回答 2

Stack Overflow用户

发布于 2019-08-15 15:58:39

您在这里所写的链接器标志:

代码语言:javascript
复制
    -Wl,-Map,output.map

应该是

代码语言:javascript
复制
    -Wl,-Map=output.map
票数 2
EN

Stack Overflow用户

发布于 2021-03-22 14:00:07

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

在我的Ubuntu clang上输出以下信息:

代码语言:javascript
复制
$ 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上使用以下内容:

代码语言:javascript
复制
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

我不能尝试这个,因为我没有链接脚本。您可以尝试更改目标三重。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57370682

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档