0

因此,我尝试为标准 IDE 移植一些 Boost.Extension 示例 - 使 tham 从 BJAM 中解放出来,并能够以跨平台的标准方式使用它们

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

我已尽力不更改原始教程代码

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

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

  1. 你从这里得到svn(只需要这个文件夹)
  2. 可以为您的平台获取 premake 或从源代码构建它并将其放入您从 svn 下载的文件夹中
  3. 您应该已经编译并安装了官方的 Boost(请阅读我们在目录中提供的 ReadMe.txt 文件),所以需要什么:
    • Boost C++ 库 (我们测试了 1.4.16 版)
    • Boost-Extension(我们使用最新版本,我们将其作为 boost 'boost/extension/ **' 的一部分进行处理,我们必须制作一些 chandes(实际上只有一个)来提升扩展,所以我们在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/文件夹中,我们可以简单地调用Boost.Extension.Tutorial/ premake4-build-windows.batwindows 来获取 Visual Studio 的 sln 或 Boost.Extension.Tutorial/ premake-build.sh获取 makefile。
  5. 您可以在生成的项目文件夹中找到生成的解决方案/makefile。
  6. 祝你好运!=)

更新:

Windows 和 Linux 的项目文件现在在 svn 中,因此您可以使用 premake 进行项目创建 - 只有 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下载。

4

1 回答 1

1

配置肯定有区别,因为这是我测试的结果:

  1. 光盘 /tmp
  2. svn 结帐http://cloudobserver.googlecode.com/svn/branches/v0.4/ cloudobserver
  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. ./互操作性

输出:

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

也许是一个发布版本?

  1. 光盘../..
  2. make -Bs 配置=发布
  3. cd bin/释放/
  4. ./互操作性

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


更新

我已经在 32 位 linux 上测试了这个

  • ubuntu gcc 4.4.5,提升 1.42.0
  • ubuntu gcc 4.5.1,提升 1.42.0
  • debian gcc 4.5.2-8,提升 1.46.1.1
  • debian gcc 4.6.1 20110428(预发布),提升 1.46.1.1

Mono-2.10.2.vmdk 映像 SuSE 与

  • gcc 4.5.0 20100604,提升 1.42.0.7.1.1(来自 yast2 存储库)
  • gcc 4.5.0 20100604,提升 1.46.1(来自源)

结论、提示

测试的所有版本都给了我正确和相同的输出。肯定有什么 PEBCAK 发生了?也许在一个新的虚拟机上重复我的上述步骤来亲眼看看

我唯一能看到出错的是

  • 错误的库路径(动态加载(旧?)不兼容的版本)
  • 使用了错误的标头(导致构建不兼容)
于 2011-05-01T15:36:08.833 回答