Ошибка сегментации на связке Qt4 и Irrlicht

Вернулся я к Irrlicht и наткнулся на след проблему. При линковке Irrlichta к проекту и начале работы с JPEG через Qt получаю сегфолт. Салют сотрим далее.

Имеем следующие: 

$ uname -a
Linux iserge-virtual-machine 3.0.0-15-generic #25-Ubuntu SMP Mon Jan 2 17:45:26 UTC 2012 i686 i686 i386 GNU/Linux
$ qmake --version
QMake version 2.01a
Using Qt version 4.7.4 in /usr/lib/i386-linux-gnu
$ ls -la /usr/local/lib/libIrrlicht.so*
lrwxrwxrwx 1 root root       20 Feb 29 12:53 /usr/local/lib/libIrrlicht.so -> libIrrlicht.so.1.7.3
-rwxr-xr-x 1 root root 20725242 Feb 29 12:53 /usr/local/lib/libIrrlicht.so.1.7.3

При линковке либы с моим проектом все норм, но стоит начать работать через Qt c JPEG получаю сегфольт след содержания: 

 

(gdb) info s
#0  0x005292fd in jpeg_CreateDecompress () from /usr/lib/libIrrlicht.so.1.7.3
#1  0x04398641 in ?? ()
   from /usr/lib/i386-linux-gnu/qt4/plugins/imageformats/libqjpeg.so
#2  0x04398912 in ?? ()
   from /usr/lib/i386-linux-gnu/qt4/plugins/imageformats/libqjpeg.so
#3  0x014f27ad in QImageReader::read(QImage*) ()
   from /usr/lib/i386-linux-gnu/libQtGui.so.4
#4  0x014f2daa in QImageReader::read() ()
   from /usr/lib/i386-linux-gnu/libQtGui.so.4
#5  0x014e14d1 in QImage::fromData(unsigned char const*, int, char const*) ()
   from /usr/lib/i386-linux-gnu/libQtGui.so.4
#6  0x014e736e in QImage::loadFromData(unsigned char const*, int, char const*)
    () from /usr/lib/i386-linux-gnu/libQtGui.so.4
#7  0x080f3ac1 in QImage::loadFromData (this=0xb6b0a018, data=..., aformat=0x0)
    at /usr/include/qt4/QtGui/qimage.h:243
#8  0x080ee1e4 in iMapTiled::readTile (this=0x84e0280, ttl=..., thread=-1, 
    mode=iMapTiled::KEEP_TILE_DATA) at ../qmgis/src/imaptiled/imaptiled.cpp:230
#9  0x080ed4c4 in iMapTiled::readTile (this=0x84e0280, ttl=..., thread=-1)
    at ../qmgis/src/imaptiled/imaptiled.cpp:136
#10 0x080f4fff in iTileReader::run (this=0x84f40a0)
    at ../qmgis/src/imaptiled/imapabstract.cpp:104
#11 0x01f2b7b3 in ?? () from /usr/lib/i386-linux-gnu/libQtCore.so.4
#12 0x025abd31 in start_thread () from /lib/i386-linux-gnu/libpthread.so.0
---Type <return> to continue, or q <return> to quit---
#13 0x023660ce in clone () from /lib/i386-linux-gnu/libc.so.6
Backtrace stopped: Not enough registers or memory available to unwind further
(gdb)

Видно что полагин libqjpeg.so идёт через либу Irrlich'та...
Валится на Linux системах(Проверял на Бубунте и МСВС)
Что делаем: идем в source/Irrlicht и правим Makefile
Комментим

 

#JPEGLIBOBJ = jpeglib/jcapimin.o jpeglib/jcapistd.o jpeglib/jccoefct.o jpeglib/jccolor.o jpeglib/jcdctmgr.o jpeglib/jchuff.o jpeglib/jcinit.o jpeglib/jcmainct.o jpeglib/jcmarker.o jpeglib/jcmaster.o jpeglib/jcomapi.o jpeglib/jcparam.o jpeglib/jcprepct.o jpeglib/jcsample.o jpeglib/jctrans.o jpeglib/jdapimin.o jpeglib/jdapistd.o jpeglib/jdatadst.o jpeglib/jdatasrc.o jpeglib/jdcoefct.o jpeglib/jdcolor.o jpeglib/jddctmgr.o jpeglib/jdhuff.o jpeglib/jdinput.o jpeglib/jdmainct.o jpeglib/jdmarker.o jpeglib/jdmaster.o jpeglib/jdmerge.o jpeglib/jdpostct.o jpeglib/jdsample.o jpeglib/jdtrans.o jpeglib/jerror.o jpeglib/jfdctflt.o jpeglib/jfdctfst.o jpeglib/jfdctint.o jpeglib/jidctflt.o jpeglib/jidctfst.o jpeglib/jidctint.o jpeglib/jmemmgr.o jpeglib/jmemnobs.o jpeglib/jquant1.o jpeglib/jquant2.o jpeglib/jutils.o jpeglib/jcarith.o jpeglib/jdarith.o jpeglib/jaricom.o

Стороку вида CXXINCS = -I../../include -Izlib -Ijpeglib -Ilibpng приводим к CXXINCS = -I../../include -Izlib -I/usr/include -Ilibpng
И не забываем установить libjpeg-dev ну вообщем хедары для jpeg и пересобрать Irrlicht
Надеюсь пригодиться кому нить

Related Articles

Free Joomla! templates by Engine Templates