mystery linking failure
Tim Prince
tprince@myrealbox.com
Tue Jan 16 13:41:00 GMT 2007
Nicholas Murphy wrote:
> I'm baffled by an "undefined symbol" linking error I'm getting. I
> created a library using ar and ranlib. Running nm clearly lists the
> relevant symbols in the text section, but when I try to compile, it
> complains that they are not there. Compiling works just fine on my
> macbook, but when I try to compile in a Fedora linux box, I get
> undefined symbol complaints. I've included the gcc output and the nm
> output below.
>
> Any help is very much appreciated!
>
> Thanks,
> Nick
> -----
>
> gcc -v -W -Wall -g -o clue-keygen -I/usr/local/include/pbc
> -I../include -L/home/someguy/clue/lib -L/usr/local/lib -lgmp -lpbc
> -lpbc_sig -lclue clue-keygen.c
> Reading specs from /usr/lib/gcc/i386-redhat-linux/3.4.4/specs
> Configured with: ../configure --prefix=/usr --mandir=/usr/share/man
> --infodir=/usr/share/info --enable-shared --enable-threads=posix
> --disable-checking --with-system-zlib --enable-__cxa_atexit
> --disable-libunwind-exceptions --enable-java-awt=gtk
> --host=i386-redhat-linux
> Thread model: posix
> gcc version 3.4.4 20050721 (Red Hat 3.4.4-2)
> /usr/libexec/gcc/i386-redhat-linux/3.4.4/cc1 -quiet -v
> -I/usr/local/include/pbc -I../include clue-keygen.c -quiet -dumpbase
> clue-keygen.c -auxbase clue-keygen -g -W -Wall -version -o
> /tmp/cc3T1TTO.s
> ignoring nonexistent directory
> "/usr/lib/gcc/i386-redhat-linux/3.4.4/../../../../i386-redhat-linux/include"
>
> #include "..." search starts here:
> #include <...> search starts here:
> /usr/local/include/pbc
> ../include
> /usr/local/include
> /usr/lib/gcc/i386-redhat-linux/3.4.4/include
> /usr/include
> End of search list.
> GNU C version 3.4.4 20050721 (Red Hat 3.4.4-2) (i386-redhat-linux)
> compiled by GNU C version 3.4.4 20050721 (Red Hat 3.4.4-2).
> GGC heuristics: --param ggc-min-expand=100 --param
> ggc-min-heapsize=131072
> as -V -Qy -o /tmp/cco8b3Nx.o /tmp/cc3T1TTO.s
> GNU assembler version 2.15.92.0.2 (i386-redhat-linux) using BFD
> version 2.15.92.0.2 20040927
> /usr/libexec/gcc/i386-redhat-linux/3.4.4/collect2 --eh-frame-hdr -m
> elf_i386 -dynamic-linker /lib/ld-linux.so.2 -o clue-keygen
> /usr/lib/gcc/i386-redhat-linux/3.4.4/../../../crt1.o
> /usr/lib/gcc/i386-redhat-linux/3.4.4/../../../crti.o
> /usr/lib/gcc/i386-redhat-linux/3.4.4/crtbegin.o
> -L/home/someguy/clue/lib -L/usr/local/lib
> -L/usr/lib/gcc/i386-redhat-linux/3.4.4
> -L/usr/lib/gcc/i386-redhat-linux/3.4.4
> -L/usr/lib/gcc/i386-redhat-linux/3.4.4/../../.. -lgmp -lpbc -lpbc_sig
> -lclue /tmp/cco8b3Nx.o -lgcc --as-needed -lgcc_s --no-as-needed -lc
> -lgcc --as-needed -lgcc_s --no-as-needed
> /usr/lib/gcc/i386-redhat-linux/3.4.4/crtend.o
> /usr/lib/gcc/i386-redhat-linux/3.4.4/../../../crtn.o
> /tmp/cco8b3Nx.o(.text+0x150): In function `main':
> /home/someguy/clue/utilities/clue-keygen.c:54: undefined reference to
> `crypto_load_param_file'
> /tmp/cco8b3Nx.o(.text+0x1ce):/home/someguy/clue/utilities/clue-keygen.c:62:
> undefined reference to `bbs_gen'
> /tmp/cco8b3Nx.o(.text+0x213):/home/someguy/clue/utilities/clue-keygen.c:66:
> undefined reference to `crypto_serialize_keys'
> collect2: ld returned 1 exit status
> make: *** [clue-keygen] Error 1
>
> -----
>
> # nm /home/someguy/clue/lib/libclue.a
>
> libclue.o:
> U __assert_fail
> 0000009d T bbs_gen
> 00000000 T bbs_init_sys_param
> 00003799 T bbs_open
> 000023f6 T bbs_sign
> 00002d94 T bbs_verify
> 0000127b T crypto_deserialize_keys
> 000010e5 T crypto_initialize_keys
> 0000003c T crypto_load_param_file
> 000c3500 C crypto_precomputed
> 00000706 T crypto_serialize_keys
> 00000535 t element_add
> 000004b8 t element_clear
> 0000377b t element_cmp
> 00001a0b t element_from_bytes
> 00002d73 t element_from_hash
> 00000514 t element_init
> 0000063e t element_init_G1
> 0000061f t element_init_G2
> 000004f5 t element_init_GT
> 00000602 t element_init_Zr
> 000005c9 t element_invert
> 000010a3 t element_length_in_bytes
> 000023d5 t element_mul
> 000023b7 t element_neg
> U element_pow2_mpz
> 00002278 t element_pow2_zn
> U element_pow3_mpz
> 000022fc t element_pow3_zn
> 00000556 t element_pow_zn
> 000005e7 t element_random
> 00001085 t element_to_bytes
> 000005a8 t element_to_mpz
> U fclose
> U fopen
> U fread
> U free
> U fwrite
> U __gmpz_clear
> U __gmpz_init
> U hash_final
> U hash_init
> U hash_update
> 00000695 T itoa
> 0000065d T itoalen
> U malloc
> U memcpy
> 00000000 B next_precompute
> 000004d3 t pairing_apply
> U pairing_init_inp_str
> 00001a29 T precompute_crypto
> 0000001a r __PRETTY_FUNCTION__.0
> U printf
> U stat
> U strcpy
> U strlen
> 00000004 B total_precompute
>
It's acting like you have specified the libraries in backwards order.
Have you broken your gcc installation so that it can't find its include
files, creating clutter in this echo?
More information about the Gcc-help
mailing list