我如何告诉链接器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(使用前将#替换为@)