在 Windows 下,从 DLL 导出带有std::vector
orboost::shared_ptr
字段的类几乎总是会导致访问冲突。显然,Linux 上不是这种情况,并且可以导入
class Test {
public:
boost::shared_ptr<SomeObscureClass> data;
// ...
}
从共享库到已经链接到 Boost 的程序,它都可以工作......但是如何?
据我了解,在 Windows 案例中崩溃的主要原因是主程序和共享库都有boost::shared_ptr<SomeObscureClass>
方法的模板实例 - 例如,delete
静态字段会混淆,这会导致不好的事情。
但在 Linux 上它显然工作正常!我见过至少五个不同的 C++ 库,它们是在 Linux 上开发的,它们内置在共享库中,并且有std::
字段,并且显然不会遇到任何问题。这是如何运作的?