4.5. Red Hat Developer Toolset 中的 binutils 的具体信息
库的静态链接
某些最新的库功能被静态链接到使用 Red Hat Developer Toolset 构建的应用程序,以支持在多个 Red Hat Enterprise Linux 版本上执行。这会产生一个小的安全风险,因为标准的 Red Hat Enterprise Linux 勘误不会改变这个代码。如果因这个风险开发人员需要重建其应用程序,红帽将使用一个安全勘表进行沟通。
由于这个额外的安全风险,强烈建议开发人员不要静态地将整个应用程序链接在一起。
在进行链接时,在对象文件后指定库
在 Red Hat Developer Toolset 中,库使用 linker 脚本链接,这些脚本可以通过静态存档指定一些符号。这需要确保与多个 Red Hat Enterprise Linux 版本兼容。但是,链接器脚本使用对应的共享对象文件的名称。因此,linker 使用不同于预期的符号处理规则,在指定程序库选项前不识别对象文件所需的符号:
scl enable devtoolset-9 'ld -lsomelib objfile.o'
$ scl enable devtoolset-9 'ld -lsomelib objfile.o'
以这种方式使用 Red Hat Developer Toolset 中的库会导致 linker 错误消息 undefined reference to symbol。要防止这个问题,请按照标准链接实践操作,并在指定对象文件的选项后添加库:
scl enable devtoolset-9 'ld objfile.o -lsomelib'
$ scl enable devtoolset-9 'ld objfile.o -lsomelib'
请注意,这个建议也适用于使用 binutils 的基本 Red Hat Enterprise Linux 版本。