gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 08:20:58 25 4
gpt4 key购买 nike

所以我try to port some Boost.Extension samples for standart IDEs - to make tham free from BJAM and to be able to work with them in standard ways across platforms .

描述了我现在遇到问题的样本 here .这是我的代码端口( library we try to load in main code filemain application 、通用 all port idea is described heresome current linux progress here (most of the samples really work as needed!) )。当我在 linux 下编译这个示例时,它会编译,它会找到库但在执行过程中失败 segmentation fault error .当我在 Windows 上编译它时,同样的事情发生了。

我已经尽力不改original tutorial code尽可能多。

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

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

  1. 你得到 svn from here (only this folder is required)
  2. get premake for your platform or build it from source并将其放入您从 svn 下载的文件夹中
  3. 您应该已经编译并安装了官方 Boost(请阅读我们在目录中提供的 ReadMe.txt 文件),因此需要:
    • Boost C++ library's (我们测试了 1.4.16 版本)
    • Boost-Extension (我们使用 latest revision ,我们将其作为 boost 'boost/extension/**' 的一部分进行处理在 Boost.Extension.Tutorial/libs/boost/extension/ 文件夹中,所以当您下载 svn 时,它只是 header )
    • Boost-Reflection(我们使用它 because of this tutorial ,我们使用 latest revision ,我们称它为 boost 'boost/reflection/**' * 的一部分,为了简单起见,我们建议将其放入 Boost.Extension.Tutorial/libs/boost/reflection * )
  4. 现在,当您的系统中有官方 Boost 时,只有 header Boost-reflection 和 Boost-extension 在 Boost.Extension.Tutorial/libs/boost 文件夹中,premake4 可执行文件在 Boost 中。 Extension.Tutorial/ 文件夹我们可以简单地调用 Boost.Extension.Tutorial/premake4-build-windows.bat 在 windows 上获取 sln for Visual Studio 或 Boost.Extension.Tutorial/premake-build.sh 获取 makefile。
  5. 您可以在生成的项目文件夹中找到生成的解决方案/makefile。
  6. 祝你好运!=)

更新:

项目文件 for Windows and Linux are now in svn所以你可以使用 premake 来创建项目 - 只需要 Boost、我们的 svn 和反射头文件库。

更新 2:所以通常我的电脑在 Windows 和 Linux 上都会出现问题。关于我的 Linux ( which is an openSUSE 11.3 VMWare image which includes 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 download from here手动编译安装。

最佳答案

肯定是配置不一样,因为这是我测试的结果:

  1. cd/tmp
  2. svn结帐http://cloudobserver.googlecode.com/svn/branches/v0.4/云观察者
  3. cd cloudobserver/Boost.Extension.Tutorial/libs/boost/
  4. svn co http://svn.boost.org/svn/boost/sandbox/boost/reflection/
  5. cd ../../projects/linux-gmake/
  6. 制作
  7. cd bin/调试/
  8. 导出 LD_LIBRARY_PATH=。
  9. ./互操作性

输出:

First reflection: It's an SUV. Second reflection: It's a compact.

也许是发布包?

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

First reflection: It's an SUV. Second reflection: It's a compact.


更新

我已经在 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

SuSE 的 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 正在发生吗? 也许在新的 VM 上重复我的上述步骤以亲 body 验

我唯一真正看到的错误是

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

关于c++ - Boost-Extension-Reflection 非bjam编译官方样本时如何修复段错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5847769/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com