我有一组可以编译为静态的C ++文件,但是当我尝试将其构建为动态
时env.SharedLibrary("mylib",["Object.hpp", "Object.cpp"]
SCons给了我这个错误:
scons: done reading SConscript files.
scons: Building targets ...
scons: *** [libjava.so] Source file: Object.hpp is static and is not compatible with shared target: libmylib.so
scons: building terminated because of errors.
这是拒绝的Object.hpp:
#ifndef _OBJECT__HPP
#define _OBJECT__HPP
namespace java {
typedef bool boolean;
typedef char byte;
class String;
class Object {
public:
virtual String toString(void) const;
};
}
#endif
答案 0 :(得分:4)
只是不要将标题添加到lib的直接源列表中。正确设置CPPPATH变量并让SCons找到标头本身,这将把它添加为隐式依赖项。有关此内容的更多信息,请查看http://www.scons.org/doc/production/HTML/scons-user.html上的SCons UserGuide,“6.3隐式依赖项”。
(注意:您的目标文件似乎没有问题,但是如果您想要使用相同的源/目标文件来创建共享和静态lib,你必须给它们不同的名字。创建的目标文件在内部标记它们是否会在以后进入共享或静态库,所以你必须避免在这里发生名称冲突...只是说'。'