我正在编译一个带有scons脚本的库。根据文档scons
,所有内容都会自动执行,并且内容应该正常工作。
但是,构建成功或失败,取决于我设置CC
的内容(即使我总是调用相同的编译器):
/usr/bin/ld: context.os: relocation R_X86_64_32S against `a local symbol' can not be used when making a shared object; recompile with -fPIC
context.os
使用以下参数构建。
env cc -o context.os -c ... -Wall -O2 -DNDEBUG -I. -I/usr/local/include ... context.c
所以scons会忘记-fPIC
参数。但是,如果我设置CC=cc
它会成功:
cc -o context.os -c ... -Wall -O2 -fPIC -DNDEBUG ...
如果我设置CC="ccache cc"
:
ccache cc -o context.os -c ... -Wall -O2 -fPIC -DNDEBUG ...
当然,设置-fPIC
后,链接在两种情况下都会成功。
所以,我想知道scons位置独立代码如何触发工作?为什么它会在CC="env cc"
情况下搞砸?