Boost-Extension-Reflection Как исправить ошибку ошибки сегментации при компиляции официального образца не с bjam? - PullRequest
0 голосов
/ 01 мая 2011

Поэтому я пытаюсь портировать некоторые образцы Boost.Extension для стандартных 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.Tutorial/libs/boost/extension/ foldeТаким образом, когда вы загрузили svn, вы получили его, это только заголовок )
    • Boost-Reflection (мы используем из-за этого урока , мы используем последняя редакция , мы называем это как часть Boost / Reflection / ** '*, и для простоты мы рекомендуем просто поместить его в Boost.Extension.Tutorial/libs/boost/reflection *)
  4. Теперь, когда в вашей системе установлен официальный Boost, в папке Boost.Extension.Tutorial/libs/boost находятся только заголовок Boost-отражение и Boost-расширение, исполняемый файл premake4 находится внутри папки Boost.Extension.Tutorial/, мы можем просто вызвать Boost.Extension.Tutorial/ premake4-build-windows.bat в Windows, чтобы получить sln для VisualСтудия или Boost.Extension.Tutorial/ premake-build.sh, чтобы получить make-файлы.
  5. Вы можете найти сгенерированные файлы решений / make-файлов в папке сгенерированных проектов.
  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 7 с Visual StudioTeam System 2008 Team Suite на борту.

Мой буст 1.46.1 скачать отсюда скомпилировано и установлено вручную.

1 Ответ

1 голос
/ 01 мая 2011

Должна быть разница в конфигурации, потому что это результат моего тестирования:

  1. CD / TMP
  2. svn checkout 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 / debug /
  8. export LD_LIBRARY_PATH =.
  9. . / Функциональная совместимость
* * +1025 выходы:

Первое отражение: это внедорожник. Второе отражение: это компакт.

Возможно, релиз релиз?

  1. кд ../..
  2. make -Bs config = release
  3. CD bin / release /
  4. . / Функциональная совместимость

Первое отражение: это внедорожник. Второе отражение: это компакт.


Обновление

С тех пор я проверил это на 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 SuSE с

  • gcc 4.5.0 20100604, повышение 1.42.0.7.1.1 (из репозитория yast2)
  • gcc 4.5.0 20100604, boost 1.46.1 (из источника)

Выводы, подсказки

Все протестированные версии дали мне правильный и идентичный вывод. Конечно, должно быть что-то, что происходит PEBCAK? Возможно, повторите мои шаги на новой виртуальной машине, чтобы убедиться в этом ?

Единственное, что я действительно могу увидеть, это что-то не так, это

  • неправильные пути к библиотекам (динамически загружаемые (старые?) Несовместимые сборки)
  • использованы неправильные заголовки (что приводит к несовместимым сборкам и тому подобное)
...