[LLVMdev] src to src conversion

Ryan M. Lefever lefever at crhc.uiuc.edu
Mon Apr 24 23:01:00 PDT 2006

I am trying to use LLVM as a source to source C compiler.  I use 
llvm-gcc to convert file.c->file.bc.  Then I use opt to run my own 
compiler passes to convert file.bc->file.opt.bc.  Then I use llc to 
convert file.opt.bc->file.opt.c.  Now, I want to use normal gcc to 
compile file.opt.c into an executable.  However, I'm getting the 
following errors:

test.opt.c:89: warning: conflicting types for built-in function 'malloc'
test.opt.o(.text+0xe7): In function `main':
: undefined reference to `__main'
collect2: ld returned 1 exit status
make: *** [test.opt.exe] Error 1


I think the problem with main and __main is that I need to link in some 
LLVM runtime libraries.  So, I tried to link in crtend (which defines 
__main).  However, I get the following error:

/home/testbed1/lefever/work/llvm/install/lib/libcrtend.a: could not read 
symbols: Archive has no index; run ranlib to add one
collect2: ld returned 1 exit status
make: *** [test.opt.exe] Error 1

I tried creating a copy of the libcrtend.a and running ranlib on it and 
I also separately tried running llvm-ranlib on it.  Neither of those 
actions worked though.  Am I linking the correct library, i.e., crtend? 
  Why am I getting the error about the archive having no index?


As far as the warning about conflicting types for malloc, it appears 
that llvm is using the declaration where the output of malloc is a 
"signed char *" rather than "void *".  Why is that?

Thanks in advance for any help.


Ryan M. Lefever  [217.333.7231]  [http://www.ews.uiuc.edu/~lefever]

More information about the llvm-dev mailing list