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>
On Tue, Aug 9, 2011 at 11:16 AM, Ashay Rane <ashay.rane at asu.edu> wrote:> 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 statushttp://llvm.org/docs/GoldPlugin.html . (I'm not completely sure that's up-to-date, but should point you in the right direction.) -Eli
`/usr/bin/ld -v' says it is not running gold and I suppose fixing that would require place LLVMgold.so into /usr/lib/bfd-plugins. Is there any way to make this work without requiring root access to the machine? Also, just to confirm, is the gold plugin required even when all of the files have been compiled/built using llvm-gcc and llvm-ar? Ashay On Tue, Aug 9, 2011 at 1:33 PM, Eli Friedman <eli.friedman at gmail.com> wrote:> On Tue, Aug 9, 2011 at 11:16 AM, Ashay Rane <ashay.rane at asu.edu> wrote: > > 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 > > http://llvm.org/docs/GoldPlugin.html . (I'm not completely sure > that's up-to-date, but should point you in the right direction.) > > -Eli-------------- next part -------------- An HTML attachment was scrubbed... URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20110809/d44b1dc8/attachment.html>