为什么SCons说我的hpp文件是静态的,不能用于创建共享库?

时间:2015-07-01 05:22:46

标签: shared-libraries scons

我有一组可以编译为静态的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

1 个答案:

答案 0 :(得分:4)

只是不要将标题添加到lib的直接源列表中。正确设置CPPPATH变量并让SCons找到标头本身,这将把它添加为隐式依赖项。有关此内容的更多信息,请查看http://www.scons.org/doc/production/HTML/scons-user.html上的SCons UserGuide,“6.3隐式依赖项”。

(注意:您的目标文件似乎没有问题,但是如果您想要使用相同的源/目标文件来创建共享静态lib,你必须给它们不同的名字。创建的目标文件在内部标记它们是否会在以后进入共享或静态库,所以你必须避免在这里发生名称冲突...只是说'。'