1 |
On Mon, Nov 23, 2009 at 6:33 PM, walt <w41ter@×××××.com> wrote: |
2 |
|
3 |
> On 11/23/2009 08:02 AM, Alexander wrote: |
4 |
> |
5 |
>> Hi, |
6 |
>> |
7 |
>> I'm trying to upgrade app-text/poppler-utils (as part of a bigger |
8 |
>> system upgrade), but it fails... |
9 |
>> |
10 |
> |
11 |
> libtool: link: x86_64-pc-linux-gnu-g++ -Wall -Wno-write-strings -O2 |
12 |
>> -march=nocona -pipe -Wl,-O1 -o pdfinfo pdfinfo.o printencodings.o |
13 |
>> parseargs.o -lpoppler /usr/lib64/libfontconfig.so |
14 |
>> /usr/lib64/libfreetype.so /usr/lib64/libexpat.so -lopenjpeg -lz |
15 |
>> ImageOutputDev.o: In function `ImageOutputDev::drawImage(GfxState*, |
16 |
>> Object*, Stream*, int, int, GfxImageColorMap*, int*, int)': |
17 |
>> ImageOutputDev.cc:(.text+0x2f4): undefined reference to |
18 |
>> `ImageStream::close()' |
19 |
>> |
20 |
> |
21 |
> Just finding the real error in all that junk is the first challenge |
22 |
> in debugging :o) I just noticed that the word 'error' doesn't even |
23 |
> appear in the libtool 'error' message. Hrmphh! Yet another black |
24 |
> mark on libtool's report card. |
25 |
> |
26 |
> Notice the double colons in "ImageStream::close()". That's a dead |
27 |
> giveaway that this is c++ code. Remember that, because you will see |
28 |
> this kind of c++ problem fairly often. |
29 |
> |
30 |
> The usual suspect is that you are now using a different (newer?) gcc |
31 |
> to build poppler-utils than you were using when you compiled the |
32 |
> c++ library that's causing this problem. (Usually, but not always.) |
33 |
> |
34 |
> So, which c++ library is causing the problem? |
35 |
> |
36 |
> A quick and dirty check: |
37 |
> $grep -r ImageStream /usr/include/* |
38 |
> /usr/include/ImageMagick/magick/image.h: DisassociateImageStream(Image *), |
39 |
> /usr/include/ImageMagick/magick/methods.h:#define DisassociateImageStream |
40 |
> PrependMagickMethod(DisassociateImageStream) |
41 |
> /usr/include/poppler/Gfx.h: Stream *buildImageStream(); |
42 |
> /usr/include/poppler/Stream.h:// ImageStream |
43 |
> /usr/include/poppler/Stream.h:class ImageStream { <-------- Eureka! |
44 |
> |
45 |
> |
46 |
> $equery b Stream.h |
47 |
> [ Searching for file(s) Stream.h in *... ] |
48 |
> dev-libs/poppler-0.10.7 (/usr/include/poppler/Stream.h) |
49 |
> |
50 |
> So, the guilty party is poppler? Looks like it. |
51 |
> |
52 |
> The cheap and dirty remedy is to re-emerge poppler, but just for my |
53 |
> own education (and yours, I hope) I'm slogging ahead: |
54 |
> |
55 |
> I reinstalled dev-libs/poppler, and now installing app-text/poppler-utils |
56 |
works. |
57 |
|
58 |
|
59 |
> The ImageStream 'class' should define a 'method' named close(). (This |
60 |
> is the usual and customary object-oriented paradigm.) Take a look at |
61 |
> Stream.h, and look for these lines: |
62 |
> |
63 |
> // Close the stream previously reset |
64 |
> void close(); |
65 |
> |
66 |
> Do you see them? If not, re-emerge poppler and look again. I'd like |
67 |
> to know if I'm on the right track. |
68 |
> |
69 |
> I checked this, and I could not find this line. Then I reinstalled it, and |
70 |
now it's there. |
71 |
|
72 |
Thanks for the very informative reply! -- next time I'll know to try this |
73 |
approach too. |
74 |
|
75 |
Best, |
76 |
|
77 |
Alexander |