2.4. Red Hat Developer Toolset 中的 GCC 细节

库的静态链接

某些最新库功能会静态链接到使用 Red Hat Developer Toolset 构建的应用程序中,以支持对多个版本的 Red Hat Enterprise Linux 执行。这会造成额外的微小的安全风险,因为标准 Red Hat Enterprise Linux 勘误不会改变这个代码。如果开发人员由于此类风险而重建其应用程序的需求,红帽将使用安全勘误进行沟通。

重要

由于这种额外的安全风险,强烈建议开发人员不以静态方式将其整个应用程序链接到同一原因。

在链接对象文件后指定库

在 Red Hat Developer Toolset 中,库使用链路器脚本链接,这些脚本可能会通过静态归档指定某些符号。这需要确保与多个 Red Hat Enterprise Linux 版本兼容。但是,linker 脚本使用对应共享对象文件的名称。因此,链接者使用不同于预期的符号处理规则,当选项在指定对象文件前指定库时,不会识别对象文件所需的符号:

$ scl enable devtoolset-11 'gcc -lsomelib objfile.o'

以这种方式使用 Red Hat Developer Toolset 的库会导致链接器错误消息 undefined 引用到符号。要防止这个问题,请按照标准链接实践操作,并在指定对象文件选项后指定添加库的选项:

$ scl enable devtoolset-11 'gcc objfile.o -lsomelib'

请注意,在使用 GCC 基本 Red Hat Enterprise Linux 版本时,这个建议也会适用。