为什么 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文件无论稍后进入共享库还是静态库,都会被内部标记,所以你必须避免名字在这里冲突...只是说说而已。)
我有一组可以编译为静态的 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文件无论稍后进入共享库还是静态库,都会被内部标记,所以你必须避免名字在这里冲突...只是说说而已。)