Build errors for vmkit

Hi,

    I can't seem to get VMKit to compile correctly. I'm on a 64 bit Jaunty system. I compiled llvm and llvm-gcc from the subversion source no problem, but when I try to compile VMKit I get some issue with GCAllocator:

/home/mmwu/Download/llvm$ ./configure
/home/mmwu/Download/llvm$ make ENABLE_OPTIMIZED=1
/home/mmwu/Download/llvm$ make ENABLE_OPTIMIZED=1 install

...

/home/mmwu/Download/$ sudo apt-get install classpath

...

/home/mmwu/Download/vmkit$ ./configure --with-llvmsrc=/home/mmwu/Download/llvm --with-llvmobj=/home/mmwu/Download/llvm --with-gnu-classpath-glibj=/usr/share/classpath/glibj.zip --with-gnu-classpath-libs=/usr/lib/classpath
/home/mmwu/Download/vmkit$ make ENABLE_OPTIMIZED=1

make[2]: Entering directory `/home/mmwu/Download/vmkit/tools/vmkit'
llvm[2]: Linking Release executable vmkit (without symbols)
/home/mmwu/Download/vmkit/Release/lib/libGCMmap2.a(gcinit.o): In function `mvm::Collector::destroy()':
gcinit.cpp:(.text+0x34): undefined reference to `GCAllocator::~GCAllocator()'
gcinit.cpp:(.text+0x3c): undefined reference to `GCAllocator::operator delete(void*)'
/home/mmwu/Download/vmkit/Release/lib/libGCMmap2.a(gcinit.o): In function `mvm::Collector::initialise()':
gcinit.cpp:(.text+0x216): undefined reference to `GCAllocator::operator new(unsigned long)'
gcinit.cpp:(.text+0x221): undefined reference to `GCAllocator::GCAllocator()'
gcinit.cpp:(.text+0x2d5): undefined reference to `GCAllocator::operator delete(void*)'
collect2: ld returned 1 exit status
make[2]: *** [/home/mmwu/Download/vmkit/Release/bin/vmkit] Error 1
make[2]: Leaving directory `/home/mmwu/Download/vmkit/tools/vmkit'
make[1]: *** [vmkit/.makeall] Error 2
make[1]: Leaving directory `/home/mmwu/Download/vmkit/tools'
make: *** [all] Error 1

I would really appreciate any help I could get.

Thanks,
Michael

Dear Michael,

The symbols that are said undefined by the compiler live in libAllocator.a. That file should be in Release/lib/, do you have it? It is possible that the compiler has linking order problems. What is the version of your gcc?

You can try changing the link order of the make command by editing tools/vmkit/Makefile.

Also, you should know that the GC of vmkit does not work on a 64bit system, so if you need the GC, you should try to emulate a 32bit system.

Let me know how that worked for you.

Nicolas

Quoting Michael Wu <mmwu@princeton.edu>:

Hi,

    Yes, I do have those files under Release/lib

I have gcc 4.3.2 (see output)

gcc -v
Using built-in specs.
Target: x86_64-linux-gnu
Configured with: ../src/configure -v --with-pkgversion='Ubuntu 4.3.2-1ubuntu12' --with-bugurl=file:///usr/share/doc/gcc-4.3/README.Bugs --enable-languages=c,c++,fortran,objc,obj-c++ --prefix=/usr --enable-shared --with-system-zlib --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --enable-nls --with-gxx-include-dir=/usr/include/c++/4.3 --program-suffix=-4.3 --enable-clocale=gnu --enable-libstdcxx-debug --enable-objc-gc --enable-mpfr --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu
Thread model: posix
gcc version 4.3.2 (Ubuntu 4.3.2-1ubuntu12)

Do I definitely need the GC of vmkit to get Java programs to run successfully? If so I'll put a chroot jail 32 bit distribution on my machine.

How would I go about changing the link order?

Michael

Nicolas Geoffray wrote:

Worked great in a 32 bit build environment. Thanks a lot!

Michael

Nicolas Geoffray wrote: