如何使用 g++47 允许 -z multidefs

2023-12-25

我如何告诉链接器g++允许符号的多个定义(选择第一个出现)?

-z multidefs 允许多个符号定义。默认情况下,可重定位对象(.o 文件)之间出现多个符号定义 将导致致命错误情况。该选项抑制 错误条件并允许采用第一个符号定义。 仅当指定 -b svr4 选项时,此选项才有效。

The -zmuldefs选项未被识别g++, nor -z OPTION。正确的参数是什么?是否可以?


不存在“g++ 链接器”这样的东西,它使用系统自己的链接器。

要将选项从 GCC 传递到链接器,您需要使用 GCC-Wl, or -Xlinker选项:

-Xlinker option
经过option作为链接器的一个选项。您可以使用它来提供 GCC 不知道如何识别的系统特定链接器选项。
如果要传递带有单独参数的选项,则必须使用-Xlinker两次,一次用于选项,一次用于参数。例如, 通过-assert definitions,你必须写-Xlinker -assert -Xlinker definitions。写起来不行-Xlinker "-assert definitions", 因为 这将整个字符串作为单个参数传递,这不是链接器所期望的。
使用 GNU 链接器时,使用以下命令将参数传递给链接器选项通常更方便option=value语法而不是作为单独的参数。 例如,您可以指定-Xlinker -Map=output.map而不是-Xlinker -Map -Xlinker output.map。其他链接器可能不支持此语法 命令行选项。

-Wl,option
经过option作为链接器的一个选项。如果option包含逗号,则以逗号分割为多个选项。您可以使用此语法来传递 该选项的参数。例如,-Wl,-Map,output.map passes -Map output.map到链接器。当使用GNU链接器时,你还可以获得 与同样的效果-Wl,-Map=output.map.

所以你会想使用

-Xlinker -z -Xlinker multidefs

or

-Wl,-z,multidefs

但你引用的文档说你还必须使用-b svr4使用该选项,例如

-Wl,-b,svr4,-z,multidefs

Edit:从您的评论中我看到您使用的是 Mac OS X,它使用 darwin 链接器及其man page http://developer.apple.com/library/mac/#documentation/Darwin/Reference/ManPages/man1/ld.1.html显示相应的选项已过时:

-m不要将多个定义视为错误。不再支持此操作。此选项已过时。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用 g++47 允许 -z multidefs 的相关文章

随机推荐