LINUX.ORG.RU

[cuda] [gcc] gcc-4.5


0

1

Компилирую пример отсюда http://code.google.com/p/thrust/

In file included from /opt/cuda/bin/../include/cuda_runtime.h:59:0,
                 from <command-line>:0:
/opt/cuda/bin/../include/host_config.h:82:2: ошибка: #error -- unsupported GNU version! gcc 4.5 and up are not supported!

Я так понимаю, gcc-4.5 ему не нравится... не поддерживает он его. печально :( Кстати, при установке тоже он gcc-4.4 тянул. Мне эта архаичность не очень нравится - странно по меньшей мере. cuda последней версии (4).

Нельзя ли как-то заставить его компилить с gcc-4.5? gcc-config меняет версию gcc, но всё нафик ломает =) какие-то пакеты из-за этого приходится перекомпиливать. Например, после смены на gcc-4.4:

eix: /usr/lib/gcc/i686-pc-linux-gnu/4.4.5/libstdc++.so.6: version `GLIBCXX_3.4.14' not found (required by eix)

(с gcc-4.5 всё работает)

Не хотелось бы возвращаться на более старую версию. =) Тем более если перекомпиливать какие-то пакеты. Как вариант... можно было бы заставить nvcc использовать всегда только gcc-4.4 принудительно. можно так сделать?..

есть такой костыль

#COMPILERS
if [ -f ${ROOT}/etc/portage/package.compilers ]; then
   while read target ver; do
      if [ "${target}" = "${CATEGORY}/${PN}" ]; then
	export ROOTPATH="/usr/i686-pc-linux-gnu/gcc-bin/$ver:$ROOTPATH"
	REAL_GCC_PATH="$(gcc-config -c| cut -d\- -f1,2,3,4)"
	REAL_GCC_VER="$(gcc-config -c | cut -d\- -f5)"
	export LIBRARY_PATH="/usr/lib/gcc/${REAL_GCC_PATH}/${REAL_GCC_VER}:${LIBRARY_PATH}"
      fi
   done < ${ROOT}/etc/portage/package.compilers
fi
[ megabaks@desktop ] ~ $ cat /etc/portage/package.compilers
dev-util/nvidia-cuda-sdk 4.4.6
media-libs/freeimage 4.4.6
sys-boot/grub 4.4.6
media-gfx/blender-cycles 4.4.6
[ megabaks@desktop ] ~ $
УМВР

megabaks ★★★★ ()
Ответ на: комментарий от megabaks

Ой... спасибо. даже не знал, что такое в gentoo есть.

А вышеозвкученных проблем как с eix не будет возникать? Ничего перекомпиливать не придётся? Вообще глупо... я думал, в gentoo всю жизнь могли сосуществовать хоть 10 версий gcc, а тут такое. Наверное, это особенность пакета eix, может, криво так написан.

Стоп.. а вот первый файл, который в первом листинге. Его вообще куда? Это сохранить в виде скрипта, и с его помощью компилить?

BattleCoder ★★★★★ ()
Ответ на: комментарий от megabaks

> первый код - это кусочек из /etc/portage/bashrc

А, всё. теперь понял =) сразу не дошло.

BattleCoder ★★★★★ ()
Ответ на: комментарий от BattleCoder

а это не имеет отношения к eix
первый код пихать в /etc/portage/bashrc же
и сосуществованию миллиона версий gcc это не мешает

megabaks ★★★★ ()
Ответ на: комментарий от megabaks

а этот /etc/portage/bashrc в zsh будет работать например?

anonymous ()
Ответ на: комментарий от megabaks

[code]test1.cu(17): error: identifier «printf» is undefined

1 error detected in the compilation of «/tmp/tmpxft_00004163_00000000-4_test1.cpp1.ii».[/code]

Гг. очень забавно. =)

Говорит о том, что версия gcc как-то криво поставлена? Всего их у меня две стоит... 4.5.3-r1 и 4.4.5.

BattleCoder ★★★★★ ()
Ответ на: комментарий от megabaks

Я знаю, ошибка к нему не имеет отношения... она скорее имеет отношение к libstdc++

[code]eix: /usr/lib/gcc/i686-pc-linux-gnu/4.4.5/libstdc++.so.6: version `GLIBCXX_3.4.14' not found (required by eix)[/code]

BattleCoder ★★★★★ ()
Ответ на: комментарий от BattleCoder

ААА. я понял. это вообще не оттуда ошибка... код кривой. ща поправлю.

Во. точно надо было добавить инклюд cstdio... забыл просто. теперь работает.

BattleCoder ★★★★★ ()
Ответ на: комментарий от BattleCoder

так - переключись опять на 4.5!
ибо GLIBCXX_3.4.14 предоставляет gcc 4.5.*
а в 4.4.* GLIBCXX_3.4.13

megabaks ★★★★ ()
Ответ на: комментарий от megabaks

Я знаю... это была попытка запуска eix с gcc-config настроенным на gcc-4.4.

С вышеозвученным скриптом работает всё как надо. Спасибо. :)

Кстати, вопрос вдогонку. Никто не знает, в cuda где-нибудь в стандартной библиотеке (мало ли) нет случайно дискретного преобразования лапласа? или придётся самому реализовывать?..

В принципе не проблема, но заниматься велосипедостроением не люблю =) буду мучиться-мучиться, а потом окажется, что зря.

Вроде не нашёл... из того, что искал по названию laplace transform.

BattleCoder ★★★★★ ()

На кол ленивых уродов, ограничивающих версии компиляторов сверху.

anonymous ()
Ответ на: комментарий от anonymous

более того, я не понимаю... зачем... ну не верю я, что в gcc-4.5 так сильно совместимость поломали...

я понимаю, если бы сначала не работало из-за чего-то... а уже потом в свежеисправленном выпуске cuda-4.0.1 каком-нить они таким образом «исправили»

А они сразу ограничивать.

Ещё бы свой компилятор, с блекджеком и шлюхами замутили... и наказали всем пользователям cuda только его использовать... хотя, кстати, возможно, это и было бы удобнее...

BattleCoder ★★★★★ ()
Ответ на: комментарий от megabaks

так вкусней

#COMPILERS
if [ -f ${ROOT}/etc/portage/package.compilers ]; then
   while read target ver; do
      if [ "${target}" = "${CATEGORY}/${PN}" ]; then
 export ROOTPATH="/usr/$MACHTYPE/gcc-bin/$ver:$ROOTPATH"
 REAL_GCC_PATH="$(gcc-config -c| cut -d\- -f1,2,3,4)"
 REAL_GCC_VER="$(gcc-config -c | cut -d\- -f5)"
 export LIBRARY_PATH="/usr/lib/gcc/${REAL_GCC_PATH}/${REAL_GCC_VER}:${LIBRARY_PATH}"
      fi
   done < ${ROOT}/etc/portage/package.compilers
fi

megabaks ★★★★ ()

[gentoo] установка 2 версий gcc (комментарий)

Странно. Я вот переписал ебилд в локальном оверлее, чтобы он требовал gcc не выше 4.5 (у меня системный - 4.5.*, последний стабильный) + подправил один из заголовков CUDA (там сменил версию gcc с 4.5 на 4.6, начиная с этой версии должно специально выдавать ошибки компиляции), после этого cuda toolkit и sdk установились без gcc-4.4, а с уже имевшимся gcc-4.5. Ни одного бага ещё не заметил, всё работает как раньше. Gentoo amd64 (стабильная ветка Gentoo, тестовые дрова nvidia и cuda sdk и toolkit). Я и прошлые версии cuda sdk и toolkit запускал с системным компилятором, а не старой версией, требуемой Nvidia, с багами на этой почве сталкиваться не приходилось. Не понятно, зачем они вводят такие искусственные ограничения...

Здесь все необходимые для этого изменения:

http://pastebin.com/qXNTJMUY

Либо можно скачать всё архивом (там ещё и старый фикс для стабильного на тот момент GCC и cuda-{sdk,toolkit}-3.0 (всё что нужно доступно на предыдущей ссылке на pastebin):

http://www.filestock.ru/uxrstbcyhv8j/portage.7z.html

Сразу скажу, что хоть я багов и не встречал из-за такого фикса, используйте на свою ответственность. Файлы нужно добавить в локальный оверлей.

anonymous ()
Ответ на: комментарий от BattleCoder

> более того, я не понимаю... зачем... ну не верю я, что в gcc-4.5 так сильно совместимость поломали...

Потому что не собирается, может быть поломан ABI с firmware видеокарты и еще бог знает чем. Если джедай — то можешь снять ограничение, найти все баги и заслать в nvidia.

Ещё бы свой компилятор, с блекджеком и шлюхами замутили... и наказали всем пользователям cuda только его использовать... хотя, кстати, возможно, это и было бы удобнее...

Свой компилятор там есть.

Кстати что мешает собрать куду 4.4, а затем переключиться обратно на 4.6?

tensai_cirno ★★★★★ ()
Ответ на: комментарий от tensai_cirno

> Кстати что мешает собрать куду 4.4, а затем переключиться обратно на 4.6?

А что мешает подправить ebuild и пропатчить пакет, разрешив нужную версию gcc или вообще отключив проверку версии? (см. выше)

anonymous ()
Ответ на: комментарий от tensai_cirno

> Кстати что мешает собрать куду 4.4, а затем переключиться обратно на 4.6?

4.6 у меня вообще замаскирована... последняя стабильная в портах 4.5...

BattleCoder ★★★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.