Переключение на Главную Страницу Страницы: 1 ОтправитьПечать
Обычная тема О совместной сборке boost/stlport (число прочтений - 8221 )
kms
1c++ power user
1c++ moderator
Отсутствует


я хочу, чтоб сюда проложили
дорогу оттуда...

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
О совместной сборке boost/stlport
06. Февраля 2008 :: 03:08
Печать  
Uzhast
Слегка систематизируем порядок совместной сборки библиотек.
Может, найдешь место на сайте проекта для благодарных потомков.

I. stlport

1. в configure.bat добавляем в нужном месте
Код
Выбрать все
if "%SELECTED_COMPILER%" == "icl" goto or_ok
 


http://yoksel.sourceforge.net/files/STLport/configure.bat
иначе статические варианты библиотек не соберутся

2. Запускаем конфигуратор
Код
Выбрать все
configure.bat -c icl --rtl-dynamic --extra-cxxflag /Zc:wchar_t
 



3. Собираем
Код
Выбрать все
nmake /ficl.mak install
 



Ладно, это просто.

II. boost

4. собираем bjam (если еще не собран)

5. В root-dir (для простоты) буста кладем файл user-config.jam, в котором добавлены строчки типа:
Код
Выбрать все
using stlport : 5.1.4 : /_BuildArea/_stlport/STLport-5.1.4/stlport /_BuildArea/_stlport/STLport-5.1.4/lib ;
using intel-win : 9.1 : "c:/program files/intel/compiler/c++/9.1/ia32/bin/icl.exe" ;
 


Насчет intel-win, походу, нужно только для 1.34.1, дальше уже не нужно.
Без строки с stlport собрать с stlport не получится

6. ОК, пока никто не видит, производим пляски с бубном:
Код
Выбрать все
rule init ...
...
    # YOKSEL START
    C++FLAGS += -D_STLP_USE_STATIC_LIB ;
    # YOKSEL FINISH
 


В оригинале - здесь: http://yoksel.net.ru/IgrySBustom

7. Собираем нужные модули:
Код
Выбрать все
@echo off

call "C:\Program Files\Microsoft Visual Studio 8\Common7\Tools\vsvars32.bat"
call "C:\Program Files\Intel\Compiler\C++\9.1\IA32\Bin\iclvars.bat"

set PATH=tools\jam\src\bin.ntx86;%PATH%

bjam --toolset=intel stdlib=stlport --runtime-link=dynamic --with-serialization --with-date_time --user-config=user-config.jam stage
 



В бат-файлах из п.7 должны быть прописаны корректные пути INCLUDE/LIB.

8. В студии прописываем новые пути к каталогам stlbort /poost.

Собственно, все.

Ах, да, еще главное не забыть опцию компилятора /Qcv6.
И тем, кто использует PlatformSDK - в нужных местах добавить /D:_STLP_NEW_PLATFORM_SDK.
« Последняя редакция: 07. Февраля 2008 :: 01:09 - kms »  

De quelle planète es-tu?
Наверх
 
IP записан
 
Uzhast
1c++ power user
Отсутствует



Сообщений: 1341
Зарегистрирован: 30. Августа 2006
Пол: Мужской
Re: О совместной сборке boost/stlport
Ответ #1 - 06. Февраля 2008 :: 06:41
Печать  
Круто! Просто круто! Исчерпывающее описание. У меня более кривой вариант сборки Улыбка Так что, спасибо!

kms писал(а) 06. Февраля 2008 :: 03:08:
5. В root-dir (для простоты) буста кладем файл user-config.jam, в котором добавлены строчки типа:
Код
Выбрать все
using stlport : 5.1.4 : /_BuildArea/_stlport/STLport-5.1.4/stlport /_BuildArea/_stlport/STLport-5.1.4/lib ;
using intel-win : 9.1 : "c:/program files/intel/compiler/c++/9.1/ia32/bin/icl.exe" ;
 


Насчет intel-win, походу, нужно только для 1.34.1, дальше уже не нужно.
Без строки с stlport собрать с stlport не получится

Вот в этом моменте у меня как раз кривизна. Я собирал без опции "using stlport". В результате boost собирался, но при линковке с Бустом вылезали ошибки линковки (либы не находил). Здесь я просто переименовывал либы в соответствии с тем, как их ожидает boost. Вообще, не очень у них тут очевидно все со stlport. По идее бусту должно быть без разницы, с какой STL происходит сборка.
  
Наверх
 
IP записан
 
kms
1c++ power user
1c++ moderator
Отсутствует


я хочу, чтоб сюда проложили
дорогу оттуда...

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Re: О совместной сборке boost/stlport
Ответ #2 - 06. Февраля 2008 :: 15:32
Печать  
Ааа... т.е. и сам еще не все умные книжки прочитал? Подмигивание
Впрочем, здесь как-то получается, что чем больше прочитал, тем больше осталось...
...

Ты еще не хлебнул проблем с нативным wchar_t?
типа такого:
Код
Выбрать все
	CString cs("Hello world");
	BSTR bs = cs.AllocSysString(); // linker error, ибо манглится по другому
	SysFreeString(bs);
 



И не думал, как избавиться от патологической зависимости от msvcp60.dll при сборке STLP интелом?
Пока только нашел еще одного ббального, но без рецепта:
http://softwarecommunity.intel.com/isn/Community/en-US/forums/thread/323875.aspx

Когда, ты говоришь, можно будет забыть о дырах в абстракциях и иметь только техто, что хочется самому? Смех
  

De quelle planète es-tu?
Наверх
 
IP записан
 
Uzhast
1c++ power user
Отсутствует



Сообщений: 1341
Зарегистрирован: 30. Августа 2006
Пол: Мужской
Re: О совместной сборке boost/stlport
Ответ #3 - 06. Февраля 2008 :: 23:38
Печать  
kms писал(а) 06. Февраля 2008 :: 15:32:
Ааа... т.е. и сам еще не все умные книжки прочитал? Подмигивание
Впрочем, здесь как-то получается, что чем больше прочитал, тем больше осталось...

Если б по сборке буста была еще хорошая умная книжка... А то тут надо Йоксель собирать, а оно рогами упирается  Злой

...

kms писал(а) 06. Февраля 2008 :: 15:32:
Ты еще не хлебнул проблем с нативным wchar_t?
типа такого:
Код
Выбрать все
	CString cs("Hello world");
	BSTR bs = cs.AllocSysString(); // linker error, ибо манглится по другому
	SysFreeString(bs);
 


CString в топку. На крайняк приделаю свой велосипед.

kms писал(а) 06. Февраля 2008 :: 15:32:
И не думал, как избавиться от патологической зависимости от msvcp60.dll при сборке STLP интелом?

Думаешь, есть смысл избавляться от этой зависимости?...

kms писал(а) 06. Февраля 2008 :: 15:32:
Когда, ты говоришь, можно будет забыть о дырах в абстракциях и иметь только техто, что хочется самому? Смех

Ох, уж эти мне спольскофилы...
  
Наверх
 
IP записан
 
kms
1c++ power user
1c++ moderator
Отсутствует


я хочу, чтоб сюда проложили
дорогу оттуда...

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Re: О совместной сборке boost/stlport
Ответ #4 - 07. Февраля 2008 :: 01:04
Печать  
Uzhast писал(а) 06. Февраля 2008 :: 23:38:
Если б по сборке буста была еще хорошая умная книжка... А то тут надо Йоксель собирать, а оно рогами упирается  Злой

Мечтать не вредно.
Там стабильность сам знаешь какая? 1.33. -> 1.34 - замена системы сборки; а отработав все проблемы на 1.34.1 - я trunk так и не собрал (serialization захромала).
Кто ж тут книжки писать станет?
По бусту, кстати, видел книжку только по графам, но шел тогда на скорости, пролетела мимо.

Цитата:
CString в топку. На крайняк приделаю свой велосипед.

Не только CString, весь MFC и прочие, с unsigned short вместо wchar_t.
Хотя тут, согласен, надо решать по мере поступления.

Цитата:
Думаешь, есть смысл избавляться от этой зависимости?...

Если только bad_cast, и в пределах одного приложения, то можно просто заткнуть в _typeinfo.h куда-нибудь что-то типа:
Код
Выбрать все
#    if defined (__INTEL_COMPILER)
class bad_cast : public exception
{
public:
	bad_cast(char const* what) : exception(what) {};
};
using ::bad_cast;
#   endif
 


А так, да, пожалуй не стоит возиться.
Странно, конечно, что при наличии stlport, что-то все равно берется из родной cpp stdlib, но ситуация такова, что это может быть и не только bad_cast, но и bad_typeid, может и еще что-то - посмотрим.

Цитата:
Ох, уж эти мне спольскофилы...

Кааак ты наас назваал?? (с) Б.Титомир Улыбка

P.S.
Ты бы переехал пока на STLPort 5.1.5 что ли - рассказал бы, нет ли проблем на твоих данных.
  

De quelle planète es-tu?
Наверх
 
IP записан
 
Uzhast
1c++ power user
Отсутствует



Сообщений: 1341
Зарегистрирован: 30. Августа 2006
Пол: Мужской
Re: О совместной сборке boost/stlport
Ответ #5 - 11. Февраля 2008 :: 16:08
Печать  
kms писал(а) 07. Февраля 2008 :: 01:04:
По бусту, кстати, видел книжку только по графам, но шел тогда на скорости, пролетела мимо.


По MPL еще есть. И еще "Beyond the C++ Standard Library: An Introduction to Boost": http://www.amazon.com/Beyond-Standard-Library-Introduction-Boost/dp/0321133544


kms писал(а) 07. Февраля 2008 :: 01:04:
Не только CString, весь MFC и прочие, с unsigned short вместо wchar_t.
Хотя тут, согласен, надо решать по мере поступления.

Есть мысля, что можно выкрутиться хитрозадым дефайном, если уж очень сильно припрет Улыбка

kms писал(а) 07. Февраля 2008 :: 01:04:
Странно, конечно, что при наличии stlport, что-то все равно берется из родной cpp stdlib

А тут ничего не поделаешь - часть типов стандартной библиотеки определяется компилятором. Например, std::exception, std::typeinfo и прочее. Если их переопределить, то фигня выйдет - структура может стать отличной от структуры встроенных типов. Поэтому stlport'у ничего не остается кроме их использования.

kms писал(а) 07. Февраля 2008 :: 01:04:
Ты бы переехал пока на STLPort 5.1.5 что ли - рассказал бы, нет ли проблем на твоих данных.

Да вроде бы там не особо здоровые изменения, чтобы заморачиваться? Хотя, конечно, надо бы перейти со временем...
  
Наверх
 
IP записан
 
Uzhast
1c++ power user
Отсутствует



Сообщений: 1341
Зарегистрирован: 30. Августа 2006
Пол: Мужской
Re: О совместной сборке boost/stlport
Ответ #6 - 11. Февраля 2008 :: 16:13
Печать  
Блин, два дня думал, почему у тебя нормально собралось с Бустом 1.34, а у меня косяки вылезли. И таки сообразил  Смех Ты, скорее всего, собирал основной проект. А я в первую очередь собираю всегда проект с тестами. А там у меня new задефайнен для отлова ликов. В 1.34 бустовцы в function втыкнули placement new. А для placement new мой макрос в какое-то непотребство разворачивается. А в основном проекте new нормальный. Недавно опять на это напоролся, когда signals прикручивал. Только там все гораздо печальнее Печаль
  
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: 1
ОтправитьПечать