C++ Boost Extension Reflection非bjam编译官方样本时如何修复分段错误?

C++ Boost Extension Reflection非bjam编译官方样本时如何修复分段错误?,c++,boost,segmentation-fault,boost-extension,C++,Boost,Segmentation Fault,Boost Extension,所以我 描述了我现在使用的trobules示例。这是我的代码端口(、常规和)。当我在linux下编译这个示例时,它会找到库,但在执行时失败。当我在Windows上编译它时,同样的事情也会发生 我已经尽了最大努力,尽量不改变 那么,代码有什么问题,为什么会失败,唯一重要的是——如何修复它 那么如何使用premake构建这些东西: 你得到 然后将其放入从svn下载的文件夹中 您应该已经编译并安装了官方Boost(请阅读我们在目录中提供的ReadMe.txt文件),因此需要: (我们使用1.4.16

所以我

描述了我现在使用的trobules示例。这是我的代码端口(、常规和)。当我在linux下编译这个示例时,它会找到库,但在执行时失败。当我在Windows上编译它时,同样的事情也会发生

我已经尽了最大努力,尽量不改变

那么,代码有什么问题,为什么会失败,唯一重要的是——如何修复它

那么如何使用premake构建这些东西:

  • 你得到
  • 然后将其放入从svn下载的文件夹中
  • 您应该已经编译并安装了官方Boost(请阅读我们在目录中提供的ReadMe.txt文件),因此需要:
    • (我们使用1.4.16版进行了测试)
    • (我们使用,我们将其作为boost'boost/extension/
      ***
      '的一部分来处理,我们必须制作一些Chande(实际上只有一个)来增强扩展,所以我们在
      boost.extension.Tutorial/libs/boost/extension/
      文件夹中提供了它,所以当您下载svn时,它只有页眉部分。
    • Boost Reflection(我们使用它,我们使用它,我们将它作为Boost'Boost/Reflection/
      ***
      '*的一部分来处理,为了简单起见,我们建议将它放入
      Boost.Extension.Tutorial/libs/Boost/Reflection
      *
  • 现在,当系统中有正式的Boost时,只有页眉的Boost反射和Boost扩展位于
    Boost.extension.Tutorial/libs/Boost
    文件夹中,premake4可执行文件位于
    Boost.Extension.Tutorial/
    文件夹中,我们只需在windows上调用
    Boost.Extension.Tutorial/premake4 build windows.bat
    即可获取Visual Studio的sln,或调用
    Boost.Extension.Tutorial/premake build.sh
    即可获取生成文件
  • 您可以在“生成的项目”文件夹中找到生成的解决方案/生成文件
  • 祝你好运 更新:

    项目文件,以便您可以使用premake进行项目创建—只需使用Boost、我们的svn和反射头库即可

    更新2: 所以通常我的电脑在Windows和Linux上都会出现问题。有关我的Linux()GCC(
    GCC-v
    )的详细信息:

    我的windows是带有Visual Studio Team System 2008 Team Suite的标准windows 7


    我的boost是手动编译和安装的1.46.1版本。

    在配置上必须有所不同,因为这是我测试的结果:

  • cd/tmp
  • svn校验云观测器
  • cd cloudobserver/Boost.Extension.Tutorial/libs/Boost/
  • svn公司
  • cd.././projects/linux-gmake/
  • 制造
  • cd-bin/debug/
  • 导出LD_库_路径=
  • /互操作性
  • 产出:

    第一反应:这是一辆SUV。 第二个思考:这是一个紧凑型

    也许是一个释放球

  • cd../
  • make-Bs config=release
  • 光盘盒/发行/
  • /互操作性
  • 第一反应:这是一辆SUV。 第二个思考:这是一个紧凑型


    更新 我已经在32位linux上用

    • ubuntu gcc 4.4.5,boost 1.42.0
    • ubuntu gcc 4.5.1,boost 1.42.0
    • debian gcc 4.5.2-8,boost 1.46.1.1
    • debian gcc 4.6.1 20110428(预发布),boost 1.46.1.1
    Mono-2.10.2.vmdk映像使用

    • gcc 4.5.0 20100604,boost 1.42.0.7.1.1(来自yast2回购协议)
    • gcc 4.5.0 20100604,boost 1.46.1(来源)
    结论、提示 测试的所有版本都给了我正确和相同的输出。肯定有什么PEBCAK的事发生了也许可以在一个新的虚拟机上重复我的上述步骤,自己看看

    我唯一能看到的是出了问题

    • 错误的库路径(动态加载(旧?)so的不兼容版本)
    • 使用了错误的标题(导致不兼容的构建od so)

    所以我的boost版本是1.46.1(从源代码(在Win和Lin上)编译而成。你能在Windows上试用吗?(我在Win和Lin上都有相同的问题)。请在更新后查看我的GCC道具。是的,它在我测试的任何地方都有效;Windows是另一回事:Windows本身对我不起作用(就是说,除了我的厌恶之外)所以你只能靠你自己了。我已经简化了进一步复制的步骤,也许你可以在你的问题上做同样的事情?这是一种魔力…我下载了更新的Linux映像,它成功了!!!感谢你所做的所有工作。所以这意味着在windows上它可能会因为其他原因崩溃…所以我将开始讨论!)再次非常感谢!=)如果您感兴趣,可以使用gdb在segfault发生时断开,并使用
    bt
    命令查看其位置。此外,您还可以使用
    strace
    精确查看从何处加载的文件,以便发现任何冲突的库版本。干杯。。。今天我们终于让它在Windows和Linux上都可以编译了。。。实际上,windows不喜欢—我们用来提供反射贴图的函数是在提供的贴图的副本上操作的—而不是在引用上。现在它在参考上运行-在Windows和Linux下都能完美工作=)今天可能会测试MacOSX。。。
    rupert@linux:~> gcc -v
    Using built-in specs.
    COLLECT_GCC=gcc
    COLLECT_LTO_WRAPPER=/usr/lib/gcc/i586-suse-linux/4.5/lto-wrapper
    Target: i586-suse-linux
    Configured with: ../configure --prefix=/usr --infodir=/usr/share/info --mandir=/usr/share/man --libdir=/usr/lib --libexecdir=/usr/lib --enable-languages=c,c++,objc,fortran,obj-c++,java,ada --enable-checking=release --with-gxx-include-dir=/usr/include/c++/4.5 --enable-ssp --disable-libssp --disable-plugin --with-bugurl=http://bugs.opensuse.org/ --with-pkgversion='SUSE Linux' --disable-libgcj --disable-libmudflap --with-slibdir=/lib --with-system-zlib --enable-__cxa_atexit --enable-libstdcxx-allocator=new --disable-libstdcxx-pch --enable-version-specific-runtime-libs --program-suffix=-4.5 --enable-linux-futex --without-system-libunwind --enable-gold --with-plugin-ld=/usr/bin/gold --with-arch-32=i586 --with-tune=generic --build=i586-suse-linux
    Thread model: posix
    gcc version 4.5.0 20100604 [gcc-4_5-branch revision 160292] (SUSE Linux)