[Qt-interest] [1/2 OT] ImageMagick, OpenMP and QThread [Mac OS X] [WORKAROUND]?
Oliver.Knoll at comit.ch
Oliver.Knoll at comit.ch
Fri Jan 29 09:36:27 CET 2010
Knoll Oliver, ITS-CMT-SUI-SL-SFR-FIN-DEV wrote on Wednesday, January 27, 2010 4:38 PM:
> ...
> My application crashes when I want to create an ImageMagick "Image"
> within a QThread. This is the offending code:
To whom it might concern, here is a crude workaround for the situation when you want to
- call ImageMagick (or any other library) from within a QThread (or any other thread such as POSIX)
- the compiler/OpenMP support library fails when called from a thread
(see http://gcc.gnu.org/bugzilla/show_bug.cgi?id=42616)
The workaround: disable OpenMP in ImageMagick. When you compile ImageMagick yourself, fine, simply add '--disable-openmp' when calling configure:
$> configure --disable-openmp
In my case I installed ImageMagick via "Mac Ports". I tried disabling some "port variants", like
$> sudo port install -v ImageMagick -- -openmp
but to no avail (I simply guessed the 'openmp' name), ImageMagick was always build with OpenMP support.
So I modified the 'Portfile'
1. Make sure you have write-access to
/opt/local/var/macports/sources/rsync.macports.org/release/ports/graphics/Portfile
(As administrator, I temporarily changed the owner of the graphics folder and Portfile
from root to administrator, my admin user)
2. Append to section 'configure.args' the line --disable-openmp:
configure.args \
--enable-shared \
--enable-static \
--disable-ltdl-install \
[...]
--without-rsvg \
--without-lqr \
--disable-openmp
3. Uninstall ImageMagick
$> sudo port uninstall ImageMagick
4. Install again
$> sudo port install -v ImageMagick
5. While the package is installing make sure that OpenMP support is really disabled, check CXXFLAGS (they are printed out when specifying the -v verbose option) etc. there should be no -fopenmp or -lgomp anymore:
PREFIX = /opt/local
EXEC-PREFIX = /opt/local
VERSION = 6.5.8
CC = /usr/bin/gcc-4.2 -std=gnu99
CFLAGS = -O2 -arch x86_64 -Wall -W -D_THREAD_SAFE
CPPFLAGS = -I/opt/local/include/ImageMagick
PCFLAGS =
DEFS = -DHAVE_CONFIG_H
LDFLAGS = -L/opt/local/lib -L/opt/local/lib -L/opt/local/lib
MAGICK_LDFLAGS = -L/opt/local/lib -L/opt/local/lib -L/opt/local/lib -L/opt/local/lib
LIBS = -lMagickCore -ltiff -lfreetype -ljpeg -L/opt/local/lib -lfontconfig -lexpat -lfreetype -lz -liconv -lXext -lSM -lICE -lX11 -lXt -lbz2 -lz -lm -lpthread -lltdl
CXX = /usr/bin/g++-4.2
CXXFLAGS = -O2 -arch x86_64 -Wall -W -D_THREAD_SAFE
When I uninstalled the ImageMagick package the 'Portfile' still remained at its place. But I don't know when it is updated, maybe with an 'port upgrade' command at some time. And obviously you have to install ImageMagick a first time to actually have this file ;)
Hope this is of any help to anyone :)
Cheers, Oliver
--
Oliver Knoll
Dipl. Informatik-Ing. ETH
COMIT AG - ++41 79 520 95 22
More information about the Qt-interest-old
mailing list