如何修复编译官方样本时不使用bjam的分段错误
Boost-Extension-Reflection How to fix segmentation fault error when compiling official sample not with bjam?
所以我尝试移植一些Boost。标准ide的扩展示例-使其免于BJAM,并能够以标准的方式跨平台使用它们。
我现在遇到麻烦的样品在这里描述。这里是我的代码端口(我们尝试在主代码文件中加载的库,主应用程序,这里描述了一般所有端口的想法,以及这里的一些当前linux进展(大多数示例确实可以根据需要工作!))。当我在linux下编译这个示例时,它编译了,它找到了库,但在执行过程中失败,出现了分段错误。当我在Windows上编译它时,同样的事情发生了。
我已经尽力不去改变原来的教程代码。
那么代码出了什么问题,为什么会失败,唯一重要的是——如何修复它?
那么如何使用premake构建这些东西:
- 你从这里得到svn(只需要这个文件夹)
- 你为你的平台预先制作或从源代码构建它,并把它放在你从svn下载的文件夹 你应该已经编译和安装了官方的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
*) - 现在,当官方的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。 - 你可以在生成的项目文件夹中找到生成的解决方案/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从这里下载编译和手动安装。
配置一定有差异,因为这是我测试的结果:
- cd/tmp
- svn checkout http://cloudobserver.googlecode.com/svn/branches/v0.4/cloudbserver
- cd cloudobserver/Boost.Extension.Tutorial/libs/提高/
- svn co http://svn.boost.org/svn/boost/sandbox/boost/reflection/
- cd . ./. ./项目/linux-gmake/
- 使
- cd bin/调试/
- 出口LD_LIBRARY_PATH =。
- 。/互操作性
输出:
第一个反应是:这是一辆SUV。第二个反思:这是一个紧凑的。
也许是一个发布版本?
- cd . ./. .
- make -Bs config=release
- cd bin/释放/
- 。/互操作性
第一个反应是:这是一辆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的构建)
- 错误的头使用(导致不兼容的构建)
- 分段故障(堆芯转储)矢量
- 数组的指针从不分段故障
- 在某些循环内使用vector.push_back时出现分段错误
- 为什么在运行时没有向我们提供有关分段错误的更多信息?
- 在线编译器中的分段C++没有打印消息
- 如何解决gcc编译器优化导致的centos双编译器设置中的分段错误
- 当我的阵列太大时出现分段错误
- Windows 10-使用gtkmm-3.0库和g++[包括再现]的分段故障
- 分段错误当我试图运行程序时出错
- 在c++中初始化矩阵时出现分段错误(核心转储)
- 尝试使用集合函数时出现分段错误
- 我无法缩小此分段错误的原因
- g++的分段错误(在NaN上使用to_string两次时)
- 我是如何在这段代码中出现分段错误的
- 创建结构的数组时遇到分段错误
- 在c++中键入向量中的所有值后,得到分段错误(核心转储)
- 在 c++ 中实现 Trie 时出现分段错误
- 为什么 fstream 在打开带有格式的文件时会导致分段错误?
- 为什么我遇到分段错误?
- 如何修复编译官方样本时不使用bjam的分段错误