为什么 SCons 说我的 hpp 文件是静态的,不能用来制作共享库?

Why is SCons saying that my hpp file is static and cannot be used to make a shared library?

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

只是不要将 header 添加到库的直接来源列表中。正确设置 CPPPATH 变量并让 SCons 找到 header 本身,这会将其添加为隐式依赖项。有关这方面的更多信息,请查看 http://www.scons.org/doc/production/HTML/scons-user.html 上的 SCons 用户指南,“6.3 隐式依赖项”。

(备注:您的 object 文件似乎没有问题,但是,如果您想要使用相同的 source/object 文件来创建共享 一个静态库,你必须给它们不同的名字。创建的object文件无论稍后进入共享库还是静态库,都会被内部标记,所以你必须避免名字在这里冲突...只是说说而已。)