gpt4 book ai didi

c++ - 链接器语法 : Linker does not use all of the linkers's flag during the linking

转载 作者:太空宇宙 更新时间:2023-11-04 07:20:21 34 4
gpt4 key购买 nike

我研究了 makefile 项目。我正在使用 gnu gcc 并作为链接器,我使用带有以下参数的 gcc:

linkerCmdLine=$(exe) -Wl,--start-group -nostdlib -Map=test_mapfile.map -l:libc.a -l:libgcc.a -l:libm.a -Wl,--end-group -o $(output)

在链接过程中,链接器不会使用所有这些标志:未使用标志 -Map=test_mapfile.map

为什么??

有一个项目设置文件,其中还存储了链接器设置。

\u201ClinkerCmdLine\=$(exe) -Wl, --start-group -nostdlib -Map\=./99_output/PUZ_GPF.map --gc-sections -l\:libc.a -l\:libgcc.a -l\:libm.a -Wl,--end-group -o $(output)\u201D

我必须如何正确存储设置?

编辑:

映射文件工作正常,但链接器文件实际上有问题。我只使用以下标志:

“linkerCmdLine=$(exe) -Wl, --script=C:/workspace/test_project/test_linker_file.ld -static -o $(output)”

我在控制台窗口中收到此错误:

arm-none-eabi-gcc.exe: 错误: 无法识别的命令行选项 '--script=C:/workspace/test_project/test_linker_file.ld'

我不明白为什么,因为映射文件和.ld 文件属于链接器标志。

最佳答案

-Wl, 前缀只传递当前参数,用逗号分隔链接器参数。因此,为了传递 -z defs,您将使用 -Wl,-z,defs

此机制仅适用于真标志,即当命令行中的位置无关紧要时。 -l 参数不是标志,gcc 编译器驱动程序将它们收集到一个单独的列表中,并在一个 block 中传递它们。

因此,此技术不适用于您想要的确切命令行。另一方面,-nostdlib 会抑制默认的 -lc -lgcc -lm

通常在 gcc 规范(编译器驱动程序的脚本)中有一项规定围绕标准使用 --start-group--end-group静态链接时的库(这似乎是你想要做的)。

我认为

linkerCmdLine=$(exe) -Wl,-Map=test_mapfile.map -static -o $(output)

应该适合您的情况。

关于c++ - 链接器语法 : Linker does not use all of the linkers's flag during the linking,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21982827/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com