【发布时间】:2014-12-25 20:41:19
【问题描述】:
我才刚开始看scons
我创建了一个简单的 test.cpp
#include <iostream>
int main(int argc, char ** argv) {
std::cout << "Hello World\n";
return 0;
}
并给它一个 SConstruct 文件
env = Environment()
env.Program(target='Hello', source=['test.cpp'])
它编译完美
g++ -o test.o -c test.cpp
g++ -o Hello test.o
现在,我将这个 Sconstruct 文件的内容转移到一个 SConscript 文件 并在 SConstruct 中输入以下内容
SConscript('SConscript', variant_dir='.build_release', duplicate=0, exports={'MODE':'release'})
SConscript('SConscript', variant_dir='.build_debug', duplicate=0, exports={'MODE':'debug'})
而 scons 选择 GCC 而不是 g++
scons: Reading SConscript files ...
scons: done reading SConscript files.
scons: Building targets ...
scons: building associated VariantDir targets: .build_release .build_debug
gcc -o .build_debug/Hello test.o
Undefined symbols for architecture x86_64:
"std::__1::locale::use_facet(std::__1::locale::id&) const", referenced from:
std::__1::basic_ostream<char, std::__1::char_traits<char> >& std::__1::__put_character_sequence<char, std::__1::char_traits<char> >(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, char const*, unsigned long) in test.o
接着是一页半的错误。
如果我用 g++ 替换 gcc 并从命令行运行,它会再次完美运行。
谁能解释一下为什么它从 g++ 变成了 gcc 以及我应该怎么做?
【问题讨论】:
-
可能有很多交互环境在起作用,但是:删除在切换到创建 SConscript 文件之前留下的 test.o 文件。或者切换到使用 duplicate=1
-
是的,谢谢——我的意思是 gcc,从屏幕消息中可以看出。 (将编辑它)。并且 - 是的,删除原始 test.o 修复了它。如果你把它作为一个答案,我会相应地标记它。谢谢。