[linux-audio-user] Re: Needing help in resolving the Pd-Gem package linker problem

Norbert Wolff norbert_wolff at t-online.de
Tue Apr 1 10:19:01 EST 2003


On Mon, 31 Mar 2003 22:59:35 -0500
Ivica Bukvic <ico at fuse.net> wrote:

> I am trying to compile Gem from source (for Pd), and while it does compile 
> without any problems at runtime (pd -lib Gem) I get the following issue:
> 
> /usr/lib/pd/extra/Gem.pd_linux: /usr/lib/pd/extra/Gem.pd_linux: undefined 
> symbol: __ctype_toupper_loc
> /usr/lib/pd/extra/Gem: can't load library

It seems that you have used the headers of an old glibc when compiling and try
to run with a newer glibc.

__ctype_toupper_loc was introduced in September 2002 glibc (don't
know the version-number).

Execute the file /lib/libc.so.6, it will tell you its version.
I don't know a way to look up the Version of your installed Header-Files
from glibc, maybe you can ask your Package-Manager.

Anyway, your Headers and Librarys MUST match !


> I tried building the static version, but then I get the following error:
> g++  -o Gem.pd_linux -L/usr/X11R6/lib -L../../../GemLibs/liborb  ../Manips/*.o 
> ../Particles/*.o ../Base/*.o ../MarkEx/*.o ../Pixes/*.o ../Controls/*.o 
> ../Nongeos/*.o ../Geos/*.o ../openGL/*.o  -shared -lquicktime -lmpeg3 -lorb 
> -lglib -lgltt -lttf -ljpeg -ltiff -lpng -lglut -lGLU -lGL -Wl,-Bstatic -lz 
> -lm -Wl,-shared -Wl,-export-dynamic -lXxf86vm -lXext -lX11
> /usr/bin/ld: cannot find -lgcc_s
> collect2: ld returned 1 exit status

Your gcc was configured with "--enable-shared" to use a shared libgcc (called
libgcc_s; only used for C++), but can't find it. See below

Also you dont really try to build the static version, as -shared -Wl,-shared
-Wl,-export-dynamic shows.


> I then checked
> ld -lgcc_s
> 
> And the only thing I got was:
> ld: warning: cannot find entry symbol _start; not setting start address
> Now, could someone please tell me what the heck does this mean???

You have invoked the linker ld, ist is used to link a prog, not to query
dependencies


> ldd /usr/lib/libgcc_s.so gives:
>         libc.so.6 => /lib/i686/libc.so.6 (0x4001a000)
>         /lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x80000000)

You have the needed lgcc_s in a place where the linker normaly looks for it.
But 
> /usr/bin/ld: cannot find -lgcc_s 
says, that he can't find it ? Very strange ...

Try to alter the specs-file from your gcc, it should be in the syme location
as libgcc.a (try gcc --print-libgcc-file-name).

The specs file contains a line like
*libgcc:
-lgcc

replace -lgcc with the following line

"%{!shared:-lgcc} %{shared:/usr/lib/libgcc_s.so}"

(only valid for gcc3, i don't know if older gcc's use the same Syntax !!)

In case of an accident (the file is very sensible with spaces)
you can reconstruct the original specfile with
  gcc -dumpspecs > specs;  or simply delete the file, gcc has a copy of it
built in.

You my also have a look in the linker-scripts from ld, there location depends
on the configuration binutils, search for  elf_i386*.
Then look if the SEARCH_DIR-Entrys includes "/usr/lib".

But the best thing you could do to solve your Problem is to reinstall your
glibc, glibc-devel, gcc, g++ and binutils-packages, when this does not not help,
consider switching to another distribution ...

Regards

	Norbert




More information about the Linux-audio-user mailing list