从库交叉编译中删除默认的-fpic标志

时间:2014-10-18 10:42:04

标签: cross-compiling scons mingw-w64 fpic

我在SConstruct中设置环境如下:

env = Environment(
    CC = 'i686-w64-mingw32-gcc',
    LINK = 'i686-w64-mingw32-gcc',
    CCFLAGS = '-Werror',
    RANLIB = 'i686-w64-mingw32-ranlib',
    AR = 'i686-w64-mingw32-ar'
)

尽管如此,scons会将-fPic参数添加到编译中:

scons: Reading SConscript files ...
scons: done reading SConscript files.
scons: Building targets ...
i686-w64-mingw32-gcc -o src/apply.os -c -Werror -fPIC src/apply.c
src/apply.c:1:0: error: -fPIC ignored for target (all code is position independent) [-Werror]

由于scons缺少任何交叉编译功能,我想删除任何“强制”编译器参数。

我正在使用此工具的2.3.4版。

1 个答案:

答案 0 :(得分:1)

SCons检测到您正在尝试构建共享库,在正常情况下需要使用“-fPIC”选项。如果您的交叉编译器不支持它,您可以在构造环境后覆盖shared-lib flags变量的定义:

env = Environment( ... as above ...)
env.Replace(SHCCFLAGS='$CCFLAGS')

这应该在创建基于C的库时删除有问题的选项。您可能必须对“SHCXXFLAGS”变量执行相同操作,该变量负责编译C ++源代码...