gpt4 book ai didi

gcc - 使用 scons 时如何将 --start-group 和 --end-group 标志传递给 gcc?

转载 作者:行者123 更新时间:2023-12-04 23:04:29 28 4
gpt4 key购买 nike

在 scons 中,您如何实现 --start-group 和 --end-group gcc 标志?这些应该包装一组特定的 LIBS,但我找不到将整个(或部分)输入包装到 LIBS 的 PREFIX/SUFFIX 选项。

如果您想知道我在说什么 gcc 标志,请在此处阅读更多信息:

GCC: what are the --start-group and --end-group command line options?

最佳答案

您是对的,此包装器没有内置前缀/后缀。指定传递给链接命令的库列表的命令行选项是基于 LIBS 计算的。环境变量并存储在 _LIBFLAGS环境变量。 _LIBFLAGS然后用作完整链接器命令行的一部分。

在 SCons 库的 Tool/link.py 中定义的默认值类似于:

env['LINKCOM']  = '$LINK -o $TARGET $LINKFLAGS $__RPATH $SOURCES $_LIBDIRFLAGS $_LIBFLAGS'
env['_LIBFLAGS']='${_stripixes(LIBLINKPREFIX, LIBS, LIBLINKSUFFIX, LIBPREFIXES, LIBSUFFIXES, __env__)}'

假设您要包装整个库集,那么在您的环境中,您可以编辑 LINKCOM_LIBFLAGS添加选项的变量:
# SConstruct

env = Environment(
CC = 'gcc',
LINKCOM = '$LINK -o $TARGET $LINKFLAGS $__RPATH $SOURCES $_LIBDIRFLAGS -Wl,--start-group $_LIBFLAGS -Wl,--end-group'
)

#env.Prepend(_LIBFLAGS="-Wl,--start-group ") # the trailing space is required
#env.Append(_LIBFLAGS=" -Wl,--end-group") # the leading space is required
env.Program('foo', ['foo.c'], LIBS='m')

我想编辑 LINKCOM侵入性较小。在我的简单示例中,这会生成:
$ scons
scons: Reading SConscript files ...
scons: done reading SConscript files.
scons: Building targets ...
gcc -o foo.o -c foo.c
gcc -o foo foo.o -Wl,--start-group -lm -Wl,--end-group
scons: done building targets.

如果您只想对库的一个子集进行分组,则必须使用单独的 LIBS “wrapped”和“unwrapped”库的变量并复制 _LIBFLAGS附加到 LINKCOM 的单独变量中的函数.

关于gcc - 使用 scons 时如何将 --start-group 和 --end-group 标志传递给 gcc?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35966243/

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