如何将标志应用于SCons中的库?

时间:2017-12-13 22:14:39

标签: build linker scons

我需要执行类似于:

的构建命令
g++ -Wl,-rpath=../libs source.o -static -Wl,-Bdynamic -ldynlib -Wl,-Bstatic -lstaticlib

我当前(错误的)SConscript在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,这会导致链接错误。解决方案(手动验证)是在dynlib之前移动source.o,dynlib是供应商提供的库。

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

我可以使用哪些解决方法让SCons生成正确的构建线?

1 个答案:

答案 0 :(得分:0)

Literal原来是解决方案。无论出于何种原因,SCons都不会在前面添加' -l'现在我的旗帜。

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