如何修复编译官方样本时不使用bjam的分段错误

Boost-Extension-Reflection How to fix segmentation fault error when compiling official sample not with bjam?

本文关键字:bjam 分段 错误 编译 何修复 官方 样本      更新时间:2023-10-16

所以我尝试移植一些Boost。标准ide的扩展示例-使其免于BJAM,并能够以标准的方式跨平台使用它们。

我现在遇到麻烦的样品在这里描述。这里是我的代码端口(我们尝试在主代码文件中加载的库,主应用程序,这里描述了一般所有端口的想法,以及这里的一些当前linux进展(大多数示例确实可以根据需要工作!))。当我在linux下编译这个示例时,它编译了,它找到了库,但在执行过程中失败,出现了分段错误。当我在Windows上编译它时,同样的事情发生了。

我已经尽力不去改变原来的教程代码。

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

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

  1. 你从这里得到svn(只需要这个文件夹)
  2. 你为你的平台预先制作或从源代码构建它,并把它放在你从svn下载的文件夹
  3. 你应该已经编译和安装了官方的Boost(请阅读我们在目录中提供的ReadMe.txt文件),所以需要什么:
    • Boost c++库(我们在1.4.16版本测试)
    • boost - extension(我们使用最新版本,我们将其作为boost 'boost/extension/** '的一部分)我们必须对boost extension进行一些更改(实际上只有一个),因此我们将其提供在Boost.Extension.Tutorial/libs/boost/extension/文件夹中,因此当您下载svn时,您得到了它,它只是头文件)
    • boost - reflection(我们使用它是因为本教程,我们使用最新版本,我们将其作为boost 'boost/reflection/** ' *的一部分,为了简单起见,我们建议将其放入Boost.Extension.Tutorial/libs/boost/reflection *)
  4. 现在,当官方的Boost在你的系统中,头只有Boost-reflection和Boost-extension在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来获得makefiles。
  5. 你可以在生成的项目文件夹中找到生成的解决方案/makefile。祝你好运!=)

更新:

Windows和Linux的项目文件现在在svn中,所以你可以绕过项目创建预制-只需要Boost,我们的svn和反射头只有lib。

更新2: 所以我的电脑在Windows和Linux上都出现问题。我的Linux(这是一个openSUSE 11.3 VMWare镜像,包括Mono 2.10.2)的详细信息GCC (gcc -v):

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) 

我的windows是标准的windows 7和Visual Studio Team System 2008 Team Suite。

我的boost是1.46.1从这里下载编译和手动安装。

配置一定有差异,因为这是我测试的结果:

  1. cd/tmp
  2. svn checkout http://cloudobserver.googlecode.com/svn/branches/v0.4/cloudbserver
  3. cd cloudobserver/Boost.Extension.Tutorial/libs/提高/
  4. svn co http://svn.boost.org/svn/boost/sandbox/boost/reflection/
  5. cd . ./. ./项目/linux-gmake/
  6. 使
  7. cd bin/调试/
  8. 出口LD_LIBRARY_PATH =。
  9. 。/互操作性

输出:

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

也许是一个发布版本?

  1. cd . ./. .
  2. make -Bs config=release
  3. cd bin/释放/
  4. 。/互操作性

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


更新

我已经在32位linux上用

测试过了
    ubuntu gcc 4.4.5, boost 1.42.0
  • ubuntu gcc 4.5.1, boost 1.42.0debian gcc 4.5.2-8, boost 1.46.1.1
  • debian gcc 4.6.1 20110428 (prerelease), boost 1.46.1.1

Mono-2.10.2。vmdk image SuSE with

  • gcc 4.5.0 20100604, boost 1.42.0.7.1.1 (from yast2 repo)
  • gcc 4.5.0 20100604, boost 1.46.1 (from source)

结论,提示

所有测试的版本都给了我正确和相同的输出。肯定有PEBCAK的事发生吧?也许在一个新的VM上重复我上面的步骤来自己看看?

我唯一能看到出错的地方是

  • 错误的库路径(动态加载(旧的?)不兼容的so的构建)
  • 错误的头使用(导致不兼容的构建)