On Mon, 31 Mar 2003 22:59:35 -0500
Ivica Bukvic <ico(a)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