我继承了一个现有的WAF构建系统。现有系统使用WAF 1.7.2。该系统支持使用WAF变体的多个交叉编译器。我需要添加一个支持新工具链的新变体。不幸的是,为了在我们的构建系统上使用这个工具链,我必须在执行任何工具之前设置Linux环境变量LD_LIBRARY_PATH
在运行waf之前设置环境变量的简单方法适用于配置步骤(为了便于讨论,我删除了一些变量):
export LD_LIBRARY_PATH=/opt/toolchains/crosstools-mipsel-linux-uclibc-4.6.3/usr/lib
./waf configure
Configuring variant docs - Available
Configuring variant linux_arm_musl - Available for ['arm-32bit']
Configuring variant linux_mips_uclibc - Available for ['mips-32bit']
'configure' finished successfully (0.288s)
但在构建步骤中失败:
export LD_LIBRARY_PATH=/opt/toolchains/crosstools-mipsel-linux-uclibc-4.6.3/usr/lib
./waf build --variant=linux_mips_uclibc_debug
Waf: Entering directory `/home/builder/dev/project/slag'
Waf: Entering directory `/home/builder/dev/project/slag/linux_mips_uclibc_debug'
[ 1/305] | linux_mips_uclibc_debug | platform | c | ['list.c'] | ['list.c.1.o']
[ 2/305] | linux_mips_uclibc_debug | platform | c | ['map.c'] | ['map.c.1.o']
[ 3/305] | linux_mips_uclibc_debug | platform | c | ['tree.c'] | ['tree.c.1.o']
/opt/toolchains/crosstools-mipsel-linux-uclibc-4.6.3/usr/bin/../libexec/gcc/mipsel-buildroot-linux-uclibc/4.6.3/cc1: error while loading shared libraries: libmpc.so.3: cannot open shared object file: No such file or directory
/opt/toolchains/crosstools-mipsel-linux-uclibc-4.6.3/usr/bin/../libexec/gcc/mipsel-buildroot-linux-uclibc/4.6.3/cc1: error while loading shared libraries: libmpc.so.3: cannot open shared object file: No such file or directory
/opt/toolchains/crosstools-mipsel-linux-uclibc-4.6.3/usr/bin/../libexec/gcc/mipsel-buildroot-linux-uclibc/4.6.3/cc1: error while loading shared libraries: libmpc.so.3: cannot open shared object file: No such file or directory
Waf: Leaving directory `/home/builder/dev/project/slag/linux_mips_uclibc_debug'
Build failed
当我深入研究这个问题时,我发现WAF在配置步骤中执行编译器时会保留环境,但在构建步骤中执行编译器之前会清除环境。在构建步骤中,我尝试了许多不同的方法让WAF设置Linux环境变量,但在编译器执行之前,我所有的尝试都被清除了
如何设置WAF,以便在构建期间执行编译器时设置Linux环境变量
你可以看看waf book § 10.5.2
我认为您的问题在于LD_LIBRARY_PATH为执行定义了libs路径。对于链接,您必须使用具有正确路径的-L标志的链接器
为此,最简单的方法是在相关变量配置中使用
conf.env.LINKFLAGS = "-L/opt/toolchains/crosstools-mipsel-linux-uclibc-4.6.3/usr/lib"
顺便说一句,定义与变量关联的特定命令非常有用:
使用类似于:
注:未经测试,我没有waf 1.7.2
如果确实需要为编译器设置
LD_LIBRARY_PATH
,可以使用monkeypatch waf compile/link命令。诸如此类:我制作了类似的东西,用
-isystem
替换-I
。工作就像一个符咒:)当然,为了便于使用,您可以在waf工具中实现这一点
相关问题 更多 >
编程相关推荐