如何在 SCons 中将标志应用到库?

How do I apply a flag to a library in SCons?

我需要执行类似于以下的构建命令:

g++ -Wl,-rpath=../libs source.o -static -Wl,-Bdynamic -ldynlib -Wl,-Bstatic -lstaticlib

我当前的(错误的)SConscript links 在 dynlib 中的这一行:

env.AppendUnique(LINKFLAGS=['-Wl,-Bdynamic', '-ldynlib']);

但是当我 运行 scons 时,我得到这个:

g++ -Wl,-rpath=../libs -static -Wl,-Bdynamic -ldynlib source.o -Wl,-Bstatic -lstaticlib

因为source.o在dynlib之后,找不到dynlib,所以会出现link错误。解决方案(手动验证)是将 source.o 移到 dynlib 之前,这是一个供应商提供的库。

理想情况下,我会将 dynlib 添加到 LIBS,但 SCons 似乎不支持那里的标志。

我可以使用什么解决方法让 SCons 生成正确的构建行?

事实证明,文字是解决方案。无论出于何种原因,SCons 现在不会在我的标志前添加“-l”。

    env['FORCEDYNAMIC'] = env.Literal('-Wl,-Bdynamic')
    env.PrependUnique(LIBS = [['${FORCEDYNAMIC}', 'dynlib']])