Boost и MSVS 2010, конфликт библиотек |
Здравствуйте, гость ( Вход | Регистрация )
Boost и MSVS 2010, конфликт библиотек |
Iron Bug |
20.8.2010, 21:22
Сообщение
#1
|
Профессионал Группа: Модератор Сообщений: 1611 Регистрация: 6.2.2009 Из: Yekaterinburg Пользователь №: 533 Спасибо сказали: 219 раз(а) Репутация: 12 |
Программистам на заметку: новая студия Microsoft Visual Studio 2010 не дружит с бустом.
Проблема в перекрытии некоторых стандартных внешних макросов и функций, объявленных в базовых библиотеках буста и добавленных в новые стандартные библиотеки студии. Например, перекрываются определения pair, из-за чего не работают многие бустовские фичи, алгоритмы, bind, лямбда-функции, фьючи(futures) в интерпроцессе. Вероятно, проблем куда больше и пока не понятно, как их решать. Если дело касается одного-двух применений - можно локально написать макросы или указать явно область видимости. Но когда начинается применение перекрытых новой студией определений где-то внутри используемых библиотек - это заставляет отказаться от идеи скрещивания буста и студии 2010. Разработчики буста в курсе проблемы, но пока что изменений нет. Я пока что отказалась от студии 2010. В сишном компиляторе там не так много полезного добавилось по сравнению с предыдущими версиями. Посмотрю, что будет дальше. |
|
|
niXman |
25.8.2010, 5:42
Сообщение
#2
|
Участник Группа: Участник Сообщений: 169 Регистрация: 18.6.2008 Пользователь №: 204 Спасибо сказали: 1 раз(а) Репутация: 0 |
приведите пример кода, и сообщения компилятора. а так же, версию boost.
|
|
|
Iron Bug |
25.8.2010, 13:47
Сообщение
#3
|
Профессионал Группа: Модератор Сообщений: 1611 Регистрация: 6.2.2009 Из: Yekaterinburg Пользователь №: 533 Спасибо сказали: 219 раз(а) Репутация: 12 |
приведите пример кода, и сообщения компилятора. а так же, версию boost. зачем тебе оно? проект у меня гигантский. частные случаи применения, на которых падает, и причины падения я привела. а так вывод слишком огромен и нет смысла его тащить сюда. буст последний, 43-й. у меня проблем нет: я просто не буду юзать 2010 студию, в компиляторе там ничего полезного не добавлилось всё равно. буст куда важней и полезнее, чем стандартные мелкософтовские библиотеки. я просто ради предупреждения других это написала. если хочешь воспроизвести ошибку, заюзай любую бустовскую библиотеку, которая использует make_pair, определённый в бусте. в списке проблем и багов буста это уже есть, но я так подозреваю, это никто править не станет. я лично не вижу простых путей разрешения этого конфликта. там слишком дофига надо менять и главное - интерфейс изменится, а это не есть гут. разработчики предлагают переопределять перекрытые функции макросами и юзать макросы, но в библиотеках, которые юзают другие библиотеки, это не сделаешь так просто. это надо переписывать код самих библиотек, в том числе интерпроцесса, лямбда-функций, бинда и т.п. а это слишком много. и главное - нет гарантии, что мелкософт какое-нить западло не устроит снова |
|
|
niXman |
26.8.2010, 16:04
Сообщение
#4
|
Участник Группа: Участник Сообщений: 169 Регистрация: 18.6.2008 Пользователь №: 204 Спасибо сказали: 1 раз(а) Репутация: 0 |
Цитата последний, 43-й. последний - 1.44.0. |
|
|
Iron Bug |
26.8.2010, 17:28
Сообщение
#5
|
Профессионал Группа: Модератор Сообщений: 1611 Регистрация: 6.2.2009 Из: Yekaterinburg Пользователь №: 533 Спасибо сказали: 219 раз(а) Репутация: 12 |
последний - 1.44.0. ну, значит, я чуть опоздала: недели две назад был ещё 43-й. да, изменения касательно студии 2010 в логе есть, но я не думаю, что они так бодро решили все проблемы: там было много проблем из-за новой студии и в разных библиотеках. если завтра будет время на работе - посмотрю 44-й. просто завтра у меня последний день на работе перед отпуском и куча дел, как обычно. а дома венды нет. боюсь, что завтра на работе будет просто не до буста. |
|
|
Iron Bug |
27.8.2010, 11:50
Сообщение
#6
|
Профессионал Группа: Модератор Сообщений: 1611 Регистрация: 6.2.2009 Из: Yekaterinburg Пользователь №: 533 Спасибо сказали: 219 раз(а) Репутация: 12 |
выкроила время, чтобы собрать 44-й буст и проверить его с 2010 студией.
вроде тех ошибок, которые раньше лезли, нет. надо ещё дома под линюксом собрать новый буст и проверить пару вещей. |
|
|
Litkevich Yuriy |
27.8.2010, 19:33
Сообщение
#7
|
разработчик РЭА Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: 94 |
|
|
|
Iron Bug |
28.8.2010, 0:05
Сообщение
#8
|
Профессионал Группа: Модератор Сообщений: 1611 Регистрация: 6.2.2009 Из: Yekaterinburg Пользователь №: 533 Спасибо сказали: 219 раз(а) Репутация: 12 |
хватит трудоголить, в отпуск иди ну, типа уже отпуск начался: весь вечер сижу, собираю линь из сорцов с нуля а за сегодняшний день на работе я успела кой-чего про оптимизацию механизмов синхронизации потоков в бусте выяснить. это мне нужно было, чтобы заложить в новую систему контроля железяк самый быстрый метод из возможных вариантов. написала тестовую программку, чтобы выяснить, какие методы синхронизации самые шустрые. самой быстрой под вендой оказалась недавно появившаяся фича interprocess'а: фьюча (future). даёт несомненное преимущество по скорости, даже по сравнению с использованием бустовских мьютексов (хотя это странно, но факт). может, потом опубликую результаты тестов. вдруг кому пригодится. ещё бы хотелось это на разных системах протестировать. я тестировала под вендой, под линём (с gcc и icc), а макоси у меня тут нет, к сожалению. |
|
|
niXman |
30.8.2010, 0:14
Сообщение
#9
|
Участник Группа: Участник Сообщений: 169 Регистрация: 18.6.2008 Пользователь №: 204 Спасибо сказали: 1 раз(а) Репутация: 0 |
Цитата фича interprocess'а: фьюча (future). в boost.interprocess нет класса future. вы о чем? Цитата (future). даёт несомненное преимущество по скорости если вы все же имели ввиду boost.thread.future<>, то никакого прироста производительности он не дает. Цитата даже по сравнению с использованием бустовских мьютексов (хотя это странно, но факт). boost.thread.future<> не имеет никакого отношения к механизмам синхронизации. это просто обертка над boost.thread, создающая объект владеющий потоком, в котором "живет" boost.thread Цитата может, потом опубликую результаты тестов. угу. дико любопытно понять, о чем вы все же |
|
|
DEADHUNT |
30.8.2010, 21:55
Сообщение
#10
|
Активный участник Группа: Участник Сообщений: 430 Регистрация: 15.4.2009 Пользователь №: 686 Спасибо сказали: 26 раз(а) Репутация: 2 |
в boost.interprocess нет класса future. вы о чем? тоже не понравилось когда прочитал. boost.thread.future<> не имеет никакого отношения к механизмам синхронизации. это просто обертка над boost.thread, создающая объект владеющий потоком, в котором "живет" boost.thread boost::thread::future это скорее обёртка над mutex, wait_condition. |
|
|
Текстовая версия | Сейчас: 29.11.2024, 20:12 |