C++ C++;用gcc编译恶作剧

C++ C++;用gcc编译恶作剧,c++,gcc,compilation,g++,C++,Gcc,Compilation,G++,我目前面临着一个奇怪的问题,我想找到有关为什么会发生这种情况以及如何预防这种情况的文档 简单地说,我正在使用动态加载的库开发一个框架,结果如下: 指针当然是一样的,没有问题,标题也是一样的 就我对C编译的了解而言,如果这两个二进制文件是用相同头的不同版本编译的,这也不会奇怪。但事实并非如此 在使用虚拟纯方法和模板时,我通常会遇到这些问题。 我想了解更多关于编译器以两种不同方式编译这些对象的原因,即使它们基于相同的头。这可能与您的构建环境有关。你能想出一个SSCCE()并将其与Makefile一起

我目前面临着一个奇怪的问题,我想找到有关为什么会发生这种情况以及如何预防这种情况的文档

简单地说,我正在使用动态加载的库开发一个框架,结果如下:

指针当然是一样的,没有问题,标题也是一样的

就我对C编译的了解而言,如果这两个二进制文件是用相同头的不同版本编译的,这也不会奇怪。但事实并非如此

在使用虚拟纯方法和模板时,我通常会遇到这些问题。
我想了解更多关于编译器以两种不同方式编译这些对象的原因,即使它们基于相同的头。

这可能与您的构建环境有关。你能想出一个SSCCE()并将其与Makefile一起发布吗?你确定两者使用相同的虚拟内存空间吗?(如果在可执行文件之间传递对象,这一点也不奇怪)可执行文件和动态库的运行时版本必须相同。可执行文件和动态库的编译器版本也必须相同。
void function()
{
  Object* object = new Object();

  call_dynamic_library(object);  
}

// Dynamic library source:
void dynamic_library_callback(Object* object)
{
  // The following would crash:
  object->method();
  // While the following would work:
  object = new Object();
  object->method();
}