[LLVMdev] llvm-gcc with static libraries

Ashay Rane ashay.rane at asu.edu
Tue Aug 9 11:16:46 PDT 2011


Hello,

While linking programs against static libraries built using llvm-ar and
llvm-ranlib, I see an error message:
could not read symbols: Archive has no index; run ranlib to add one
collect2: ld returned 1 exit status

Using either /usr/bin/nm or llvm-nm (depending on the use of --emit-llvm
flag to llvm-gcc), one of them is able to list the symbols in the archive
file. However, the link step fails. Two sample runs follow. Am I missing any
options? The source code was obtained from:
http://www.yolinux.com/TUTORIALS/LibraryArchives-StaticAndDynamic.html

== Without --emit-llvm ==

$ llvm-gcc -c ctest1.c ctest2.c

$ file *.o
ctest1.o: ELF 64-bit LSB relocatable, x86-64, version 1 (SYSV), not stripped
ctest2.o: ELF 64-bit LSB relocatable, x86-64, version 1 (SYSV), not stripped

$ llvm-ar cru libctest.a *.o

$ ls
ctest1.c  ctest1.o  ctest2.c  ctest2.o  libctest.a  prog.c

$ llvm-ar t libctest.a
ctest1.o
ctest2.o

$ llvm-nm libctest.a

$ nm libctest.a
nm: #_LLVM_SYM_TAB_: File format not recognized

ctest1.o:
0000000000000000 T ctest1

ctest2.o:
0000000000000000 T ctest2

$ llvm-ranlib libctest.a

$ llvm-gcc prog.c libctest.a -o p
libctest.a: could not read symbols: Archive has no index; run ranlib to add
one
collect2: ld returned 1 exit status


== With --emit-llvm ==

$ llvm-gcc --emit-llvm -c ctest1.c ctest2.c

$ file *.o
ctest1.o: LLVM bitcode
ctest2.o: LLVM bitcode

$ llvm-ar cru libctest.a *.o

$ ls
ctest1.c  ctest1.o  ctest2.c  ctest2.o  libctest.a  prog.c

$ llvm-ar t libctest.a
ctest1.o
ctest2.o

$ llvm-nm libctest.a

libctest.a(ctest1.o):
         T ctest1

libctest.a(ctest2.o):
         T ctest2

$ nm libctest.a
nm: #_LLVM_SYM_TAB_: File format not recognized
nm: ctest1.o: File format not recognized
nm: ctest2.o: File format not recognized

$ llvm-ranlib libctest.a

$ llvm-gcc prog.c libctest.a -o p
libctest.a: could not read symbols: Archive has no index; run ranlib to add
one
collect2: ld returned 1 exit status
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20110809/d4684ad9/attachment.html>


More information about the llvm-dev mailing list