LINUX.ORG.RU

dolphin-emu - если кому-нибудь нечем заняться


0

2

Попытался скомпилировать dolphin-emu и получил ошибку. Как порядочный человек, я запостил баг. Мне сказали что у меня старый компилятор и пожелали удачи, баг закрыт как некорректный. Посмотрел профиль этого человека - Owner проекта!

Сделал gcc-config 2, чтобы переключить GCC 4.4.7 на 4.6.3, а потом «source /etc/profile». Скомпилировалось, играю. А тема о том что я предлагаю кому-нибудь пофиксить баг, если кому-то скучно.

[ 53%] Building CXX object Source/Core/AudioCommon/CMakeFiles/audiocommon.dir/Src/aldlist.cpp.o
Linking CXX static library libaudiocommon.a
[ 53%] Built target audiocommon
Scanning dependencies of target common
[ 53%] Building CXX object Source/Core/Common/CMakeFiles/common.dir/Src/BreakPoints.cpp.o
/data/Разобраться/dolphin_emulator/dolphin-emu/Source/Core/Common/Src/BreakPoints.cpp: In member function ‘void BreakPoints::Clear()’:
/data/Разобраться/dolphin_emulator/dolphin-emu/Source/Core/Common/Src/BreakPoints.cpp:118: ошибка: expected primary-expression before ‘[’ token
/data/Разобраться/dolphin_emulator/dolphin-emu/Source/Core/Common/Src/BreakPoints.cpp:118: ошибка: expected primary-expression before ‘]’ token
/data/Разобраться/dolphin_emulator/dolphin-emu/Source/Core/Common/Src/BreakPoints.cpp:118: ошибка: expected primary-expression before ‘const’
make[2]: *** [Source/Core/Common/CMakeFiles/common.dir/Src/BreakPoints.cpp.o] Ошибка 1
make[1]: *** [Source/Core/Common/CMakeFiles/common.dir/all] Ошибка 2
make: *** [all] Ошибка 2
zenitur@athlon64x2 /data/Разобраться/dolphin_emulator/dolphin-emu/build $

Сам файл.

Dolphin это эмулятор Nintendo GameCube и Wii. Сайт проекта http://ru.dolphin-emu.org/.

My compiler is fine and cute! Did you know about LSB standard that guarantees backward compatibility?

Я бы на месте разраба не был столь дружелюбен и послал бы на хер за такой бред (к тому же безграмотный бред).

С чего ты взял, что это баг? Ничего, что C++ на месте не стоит?

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

Потому что свежий цхх-рантайм несложно поставить в ХР, ёпт. Да и собрать нужный гцц в твоём некродистрибутиве наверно можно. Так что не ной.

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

относительно Windows, linux — это (сексуальное) меньшинство

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

> собрать нужный гцц в твоём некродистрибутиве наверно можно

Всё давно собрано и играется.

> Так что не ной.

Тема - предложение исправить ошибку в десяти строчках кода. Если никому это не нужно - все просто пройдут мимо.

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

почему ты считаешь новый стандарт ошибкой?

anonymous
()
Ответ на: комментарий от ZenitharChampion
void BreakPoints::Clear()
{
  if (jit)
  {
    for (TBreakPoints::iterator bp = m_BreakPoints.begin(); bp != m_BreakPoints.end(); ++bp)
    {
      jit->GetBlockCache()->InvalidateICache(bp.iAddress, 4);
    }
  }
  m_BreakPoints.clear();
}
anonymous
()
Ответ на: комментарий от anonymous
--jit->GetBlockCache()->InvalidateICache(bp.iAddress, 4); ++jit->GetBlockCache()->InvalidateICache(bp->iAddress, 4);
anonymous
()
Ответ на: комментарий от anonymous

Спасибо. У меня глупый вопрос - этот код только для старого GCC и ломается совместимость с новым, или теперь должно работать во всех GCC 4?

ZenitharChampion ★★★★★
() автор топика
Последнее исправление: ZenitharChampion (всего исправлений: 1)
diff --git a/Source/Core/Common/Src/BreakPoints.cpp b/Source/Core/Common/Src/BreakPoints.cpp
index 62fadef..6321c26 100644
--- a/Source/Core/Common/Src/BreakPoints.cpp
+++ b/Source/Core/Common/Src/BreakPoints.cpp
@@ -114,12 +114,10 @@ void BreakPoints::Clear()
 {
        if (jit)
        {
-               std::for_each(m_BreakPoints.begin(), m_BreakPoints.end(),
-                       [](const TBreakPoint& bp)
-                       {
-                               jit->GetBlockCache()->InvalidateICache(bp.iAddress, 4);
-                       }
-               );
+               for (TBreakPoints::iterator i = m_BreakPoints.begin(); i != m_BreakPoints.end(); i++)
+               {
+                       jit->GetBlockCache()->InvalidateICache(i->iAddress, 4);
+               }
        }
        
        m_BreakPoints.clear();

// Пора бы уже выкинуть GCC 4.4

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

У меня глупый вопрос - этот код только для старого GCC и ломается совместимость с новым, или теперь должно работать во всех GCC 4?

В репозитории код из стандарта C++11 - используется lambda function. Предложенный код не ломает совместимость.

KennyMinigun ★★★★★
()
Последнее исправление: KennyMinigun (всего исправлений: 1)
Ответ на: комментарий от KennyMinigun

В RHEL 6 как раз GCC 4.4. Стабильность, энтерпрайс. А проприетарное По компилируют в CentOS 5, где GCC 4.1, потому что стандарт LSB.

Сейчас буду пробовать твой патч!

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

Попробовал патч из сообщения, на которое я пишу ответ.

Scanning dependencies of target common
[ 53%] Building CXX object Source/Core/Common/CMakeFiles/common.dir/Src/BreakPoints.cpp.o
/data/Разобраться/dolphin_emulator/dolphin-emu/Source/Core/Common/Src/BreakPoints.cpp: In member function ‘void BreakPoints::Clear()’:
/data/Разобраться/dolphin_emulator/dolphin-emu/Source/Core/Common/Src/BreakPoints.cpp:119: ошибка: ‘class __gnu_cxx::__normal_iterator<TBreakPoint*, std::vector<TBreakPoint, std::allocator<TBreakPoint> > >’ has no member named ‘iAddress’
make[2]: *** [Source/Core/Common/CMakeFiles/common.dir/Src/BreakPoints.cpp.o] Ошибка 1
make[1]: *** [Source/Core/Common/CMakeFiles/common.dir/all] Ошибка 2
make: *** [all] Ошибка 2
zenitur@athlon64x2 /data/Разобраться/dolphin_emulator/dolphin-emu/build $
ZenitharChampion ★★★★★
() автор топика

маразм крепчал.
тебе в job

xtraeft ★★☆☆
()
Ответ на: комментарий от KennyMinigun
Scanning dependencies of target common
[ 53%] Building CXX object Source/Core/Common/CMakeFiles/common.dir/Src/BreakPoints.cpp.o
[ 54%] Building CXX object Source/Core/Common/CMakeFiles/common.dir/Src/CDUtils.cpp.o

Ага, с твоим патчем пошло компилироваться дальше и даже Warning'а не написало. Если скомпилируется до конца то можно даже в апстрим отправить.

ZenitharChampion ★★★★★
() автор топика
Ответ на: комментарий от KennyMinigun
Scanning dependencies of target common
[ 53%] Building CXX object Source/Core/Common/CMakeFiles/common.dir/Src/BreakPoints.cpp.o
[ 54%] Building CXX object Source/Core/Common/CMakeFiles/common.dir/Src/CDUtils.cpp.o
[ 54%] Building CXX object Source/Core/Common/CMakeFiles/common.dir/Src/ColorUtil.cpp.o
[ 54%] Building CXX object Source/Core/Common/CMakeFiles/common.dir/Src/ConsoleListener.cpp.o
[ 54%] Building CXX object Source/Core/Common/CMakeFiles/common.dir/Src/FileSearch.cpp.o
[ 54%] Building CXX object Source/Core/Common/CMakeFiles/common.dir/Src/FileUtil.cpp.o
[ 54%] Building CXX object Source/Core/Common/CMakeFiles/common.dir/Src/Hash.cpp.o
[ 54%] Building CXX object Source/Core/Common/CMakeFiles/common.dir/Src/IniFile.cpp.o
[ 54%] Building CXX object Source/Core/Common/CMakeFiles/common.dir/Src/LogManager.cpp.o
[ 55%] Building CXX object Source/Core/Common/CMakeFiles/common.dir/Src/MathUtil.cpp.o
[ 55%] Building CXX object Source/Core/Common/CMakeFiles/common.dir/Src/MemArena.cpp.o
In file included from /data/Разобраться/dolphin_emulator/dolphin-emu/Source/Core/Common/Src/MemArena.cpp:20:
/data/Разобраться/dolphin_emulator/dolphin-emu/Source/Core/Common/Src/MemArena.h:36: ошибка: нет декларации ‘nullptr’ в этой области видимости
/data/Разобраться/dolphin_emulator/dolphin-emu/Source/Core/Common/Src/MemArena.cpp: In member function ‘void* MemArena::CreateView(s64, size_t, void*)’:
/data/Разобраться/dolphin_emulator/dolphin-emu/Source/Core/Common/Src/MemArena.cpp:106: ошибка: нет декларации ‘nullptr’ в этой области видимости
/data/Разобраться/dolphin_emulator/dolphin-emu/Source/Core/Common/Src/MemArena.cpp: In function ‘bool Memory_TryBase(u8*, const MemoryView*, int, u32, MemArena*)’:
/data/Разобраться/dolphin_emulator/dolphin-emu/Source/Core/Common/Src/MemArena.cpp:198: ошибка: аргумент по умолчанию для параметра 2 ‘void* MemArena::CreateView(s64, size_t, void*)’ еще не был проанализирован
make[2]: *** [Source/Core/Common/CMakeFiles/common.dir/Src/MemArena.cpp.o] Ошибка 1
make[1]: *** [Source/Core/Common/CMakeFiles/common.dir/all] Ошибка 2
make: *** [all] Ошибка 2
zenitur@athlon64x2 /data/Разобраться/dolphin_emulator/dolphin-emu/build $

Спасибо что потратил своё время на фикс той ошибки, но похоже их будет ещё очень много. Так что бесполезно.

ZenitharChampion ★★★★★
() автор топика
Последнее исправление: ZenitharChampion (всего исправлений: 1)
Ответ на: комментарий от ZenitharChampion

Если скомпилируется до конца то можно даже в апстрим отправить.

Ты тупой что ли? Если бы автор хотел писать по старому стандарту, он бы по нему писал.

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

Я не знаю по какому стандарту пишут программы и библиотеки другие люди, но у них компилируется везде. Ну там сто компонентов X.org, опенофис, GTK, Qt, libjpeg, libopenssl. Им не важно, GCC 4.1 у меня или 4.7.

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

нет декларации ‘nullptr’ в этой области видимости

Всё просто :) Надо где-нибудь (в глобальном хедере) еще дописать

#ifndef nullptr
#include <cstddef>
#define nullptr NULL
#endif

Но поддерживаю анонимуса. Новые стандарты на то они и новые.

KennyMinigun ★★★★★
()
Последнее исправление: KennyMinigun (всего исправлений: 1)
Ответ на: комментарий от ZenitharChampion

Класть в архив с бинарником libstdc++.so.6?

Ээ.. зачем? Оно же в процессе билда уже слинковалось с системным libstdc++

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

Получилось, только не в глобальном хедере, а в MemArena.h. Глобальный я не умею искать. Дополнено: о, всё, нашёл. Common.h. Готово! libcommon.a.

ZenitharChampion ★★★★★
() автор топика
Последнее исправление: ZenitharChampion (всего исправлений: 1)
Ответ на: комментарий от ZenitharChampion

Они заботятся о совместимости. Но это не значит, что они обязаны это делать, просто их продукты очень много где используются, в том числе в системах, где основным компиляторм является gcc 3.x. А уж авторы развлекательного софта вроде игр и эмуляторов не обязаны тем более.

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

И в итоге часть программ компилируются только со всеми старыми библиотеками и компиляторами, а другая часть - только с новыми. Например, недавно мне понадобилась открытая библиотека nvtt (не помню для чего именно). Ради неё пришлось установить старый libglew, скомпилировать и вернуть прежний - изменялось только последнее число версии, сломалась совместимость с минорным релизом. Обратный же пример - этот эмулятор.

Недавно подруга восстанавливала удалённые файлы и она попросила меня помочь восстановить повреждённые файлы. Дал ей ссылку, восстановила. Программы там в основном 2005 года, конечно же для винды. В линуксе половина из них бы не скомпилировалась, а анонимусы на ЛОРе в ответ на просьбы помочь запустить ответили бы что «не нужно, протухло» и «не развивается - значит умерло».

Получается что релиз какой-либо программы запускается с компилятором плюс набором системных библиотек только того года выпуска, что и сам релиз программы. А если плюс или минус год-два - всё, не работает. Что же будет ещё через несколько лет?! Вот такой вот Open Source. За исключением некоторых ключевых системных компонентов, перечисленных выше. Вот поэтому и нужен LSB и стандартизация.

ZenitharChampion ★★★★★
() автор топика
Последнее исправление: ZenitharChampion (всего исправлений: 5)
Ответ на: комментарий от anonymous

Не хочу - пусть побольше адекватных людей увидит и прочитает. Это сообщение не слишком длинное, чтобы ради него создавать блог.

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

это ты, пионэр, просто не знаешь сколько хорошего досового софта под не собирается gcc. понапридумывали всяких линупсов, поломали совместимость — кому это нужно?

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

Есть собранный для CentOS: people.centos.org/tru/devtools-1.1/

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

> Ничего, что C++ на месте не стоит?

Знающие люди, скажите. C++ - это как веб-стандарты? Действительно ли оправдана злость программиста, которого попросили обеспечить поддержку компилятора 2010 года в своей программе, можно ли здесь проводить аналогию с IE6?

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

Действительно ли оправдана злость программиста, которого попросили обеспечить поддержку компилятора 2010 года

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

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