[PD] Gem undefined symbol: __pure_virtual

rfigura at erbse.azagtoth.de rfigura at erbse.azagtoth.de
Thu Mar 14 00:11:37 CET 2002


Hi,

 (if you have seen similar, skip right to the end...)

I am trying to use gem-0.79 on pd-0.35-test11.linux. After
some patching Gem compiles fine (sgiimage uses string instead of
bstring, randomF.cpp has some invalid macro).

$ uname -mrsp
Linux 2.4.18-pre9 i586 unknown
$ gcc --version
2.95.3
$ pwd
/home/rfigura/tmp/gem/src/Objects

#### Linking is however not that easy. The Makefile command is like
#### this:
$ ld -shared -L/usr/X11R6/lib -o ../../Gem.pd_linux *.o \
	-lGLU -lGL -lm \
	-L../AuxLibs/Jpeg -ljpeg -L../AuxLibs/tiff -ltiff \
	-L../AuxLibs/gltt -lgltt -L../AuxLibs/gltt/freetype/lib -lttf \
	-L../AuxLibs/td -ltd -L../AuxLibs/particle -lparticle \
	-L../AuxLibs/liborb -lorb \
	-lX11 -lXext -ldl
ld: final link failed: Bad value
#### if i would only know what this message means - except of "failed".

#### It is an error caused by most AuxLibs:
$ ld -shared -L/usr/X11R6/lib -o ../../Gem.pd_linux *.o \
	-lGLU -lGL -lm \
	-L../AuxLibs/gltt -lgltt -L../AuxLibs/gltt/freetype/lib -lttf \
	-lX11 -lXext -ldl

#### Works. Let's check this Binary... pd says:
undefined symbol: __builtin_delete

#### __builtin_delete is a libc function. We need libc. gcc handles this
$ gcc -shared -L/usr/X11R6/lib -o ../../Gem.pd_linux *.o \
	-lGLU -lGL -lm \
	-L../AuxLibs/gltt -lgltt -L../AuxLibs/gltt/freetype/lib -lttf \
	-lX11 -lXext -ldl

#### as to be expected pd says:
undefined symbol: TIFFOpen

#### Linkage fails if i include some auxlibs. Lets see which file is
#### used:
$ strace ld -shared -L/usr/X11R6/lib -o ../../Gem.pd_linux *.o \
	-lGLU -lGL -lm \
	-L../AuxLibs/gltt -lgltt -L../AuxLibs/gltt/freetype/lib -lttf
	-lX11 -lXext -ldl 2>&1 | grep open | grep tiff
[...]
open("../AuxLibs/tiff/libtiff.a", O_RDONLY)

#### Okay. I have libtiff installed on my machine anyway (its the same
#### version) so let's use that one... Next error is about jpeg. I also
#### have that one installed...

gcc -shared -L/usr/X11R6/lib -o ../../Gem.pd_linux *.o \
	-lGLU -lGL -lm \
	-ljpeg -ltiff \
	-L../AuxLibs/gltt -lgltt -L../AuxLibs/gltt/freetype/lib -lttf \
	-lX11 -lXext -ldl

#### pd says:
undefined symbol: sqrt

#### this is not fair. There *is* an -lm. Do we have a redefinition
#### inside some obscure lib?
$ for i in `find ../AuxLibs/ -name "lib*.a"` ; do objdump -t $i | 
        grep sqrt && echo in $i ; done
00000000       F *UND*  00000000 sqrt
in ../AuxLibs/td/libtd.a

#### hand-make td
$ cd ../AuxLibs/td/
$ cp Makefile.irix Makefile.linux
$ vi Makefile.linux
$ diff Makefile.irix Makefile.linux 
6,8c6,8
< CC     = cc
< CFLAGS = -O
---
> CC     = gcc
> CFLAGS = -O2
$ env PLATFORM=linux make
[...]

$ cd ../../Objects
$ gcc -shared -L/usr/X11R6/lib -o ../../Gem.pd_linux *.o \
	-lGLU -lGL -lm \
	-ltiff -ljpeg \
	-L../AuxLibs/gltt -lgltt \
	-L../AuxLibs/gltt/freetype/lib -lttf \
	-L../AuxLibs/td -ltd \
	-lX11 -lXext -ldl
#### ...but the error persists.
$ ls -l /usr/lib/libm.*
-rw-r--r--   1 root     root       470774 Dec 27 15:37 /usr/lib/libm.a
lrwxrwxrwx   1 root     root           19 Dec 29 22:51 /usr/lib/libm.so -> ../../lib/libm.so.6
$ ld -verbose -shared -L/usr/X11R6/lib -o ../../Gem.pd_linux *.o \
	-lGLU -lGL -lm -ltiff -ljpeg \
	-L../AuxLibs/gltt -lgltt -L../AuxLibs/gltt/freetype/lib -lttf \
	-L../AuxLibs/td -ltd -lX11 -lXext -ldl | grep libm
attempt to open /usr/lib/libm.so failed
attempt to open /usr/lib/libm.a succeeded
$ objdump -t /usr/lib/libm.a | grep " sqrt$"
00000000  w    F .text  0000006a sqrt
#### why should i use the shared object (.so) instead?
$ gcc -shared -L/usr/X11R6/lib -o ../../Gem.pd_linux *.o \
	-lGLU -lGL /lib/libm.so.6 -ltiff -ljpeg \
	-L../AuxLibs/gltt -lgltt -L../AuxLibs/gltt/freetype/lib -lttf \
	-L../AuxLibs/td -ltd -lX11 -lXext -ldl

#### pd error is replaced (should i be happy?). pd says:
undefined symbol: orb_open
$ cd ../AuxLibs/liborb/
$ make # makefile looks so good
$ cd ../../Objects
$ gcc -shared -L/usr/X11R6/lib -o ../../Gem.pd_linux *.o \
	-lGLU -lGL /lib/libm.so.6 -ltiff -ljpeg \
	-L../AuxLibs/gltt -lgltt -L../AuxLibs/gltt/freetype/lib -lttf \
	-L../AuxLibs/td -ltd -L../AuxLibs/liborb -lorb -lX11 -lXext -ldl
#### pd says:
undefined symbol: pColorD__Ff11PDomainEnumfffffffff

#### but we no know how to find it (let's see it once again)
$ for i in `find ../AuxLibs/ -name "lib*.a"` ; do objdump -t $i | 
        grep sqrt && echo in $i ; done
#### None? And who is using it?
$ for i in `ls *.o` ; do objdump -t $i | 
        grep pColorD__Ff11PDomainEnumfffffffff && echo in $i ; done
00000000         *UND*  00000000 pColorD__Ff11PDomainEnumfffffffff
in part_color.o
00000000         *UND*  00000000 pColorD__Ff11PDomainEnumfffffffff
in particle.o
#### Ahum. I be linking many unnecessary object files?
[...removed lengthy checking...]
#### - No.

#### Let's hand-make particle.
#### Good Makefile but particle uses c++. Will we need libc++?
$ make
g++ -O2  -I. -I.. -I/usr/include -I/usr/include/GL -c system.cpp
system.cpp:100: name lookup of `i' changed for new ANSI `for' scoping
system.cpp:139: name lookup of `i' changed for new ANSI `for' scoping
#### invisible i.
$ cp system.cpp system.cpp.bak
$ vi system.cpp
$ diff system.cpp.bak system.cpp 
100c100
<       for(i=group_count; i<new_count; i++)
---
>       for(int i=group_count; i<new_count; i++)
139c139
<       for(i=list_count; i<new_count; i++)
---
>       for(int i=list_count; i<new_count; i++)
$ make
$ cd ../../Objects
#### i don't have libglut installed so the pspray demo won't work.

#### make libttf
$ cd ../AuxLibs/gltt/freetype/lib
$ make

#### gltt depends on ttf... remake it.
FTFont.h:1: ANSI C++ forbids declaration `Copyright' with no type
#### cough cough. This is not a c++ file.
http://ftp.mayn.de/pub/unix/graphic/moonlight/gltt-1.8.tar.gz
####
$ pwd
/home/rfigura/tmp/gem/src/AuxLibs/
$ tar xzvf gltt-1.8.tar.gz
$ cd gltt-1.8
$ ln -s ../freetype .
$ ln -s ../Makefile .
$ make libgltt.a
$ cp libgltt.a ..

#### pd says:
undefined symbol: __pure_virtual

#### we need g++ to link?
g++ -shared -L/usr/X11R6/lib -o ../../Gem.pd_linux *.o \
	-lGLU -lGL /lib/libm.so.6 -ljpeg -ltiff \
	-L../AuxLibs/gltt -lgltt -L../AuxLibs/gltt/freetype/lib -lttf \
	-L../AuxLibs/td -ltd -L../AuxLibs/particle -lparticle \
	-L../AuxLibs/liborb -lorb \
	-lX11 -lXext -ldl
#### Nope, pd is still persisting about __pure_virtual

####
Does someone understand what is going on here, please? I am quite
frustrated. I've been for a week on this. I...

--- communication suddenly terminated ---

Greetings
- Robert Figura

-- 
/* mandlsig.c v0.23  (c) by Robert Figura <rfigura at metabit.com> */
I=1702;float O,o,i;main(l){for(;I--;putchar("oO .,\nm>cot.bitamea\
@urigrf <raguFit erobR"[I%74?I>837&874>I?I^833:l%5:5]))for(O=o=l=
0;O*O+o*o<(16^l++);o=2*O*o+I/74/11.-1,O=i)i=O*O-o*o+I%74*.04-2.2;}
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 232 bytes
Desc: not available
URL: <http://lists.puredata.info/pipermail/pd-list/attachments/20020313/02f23b71/attachment.pgp>


More information about the Pd-list mailing list