Question

I am trying to build omniORB libraries on RHEL 5.5.

I tried running configure with

CC=gcc and CXX=g++ and PYTHON=bin/omnipython

I run into this problem where it complains about

gmake[3]: Entering directory `/home/local/NT/jayanthv/omniORB-4.1.4/src/lib/omniORB'
../../../bin/omniidl -bcxx -p../../../src/lib/omniORB -Wbdebug -Wba -p../../../src/lib/omniORB -Wbdebug -v -ComniORB4 ../../../idl/Naming.idl


omniidl: ERROR!

omniidl: Could not open IDL compiler module _omniidlmodule.so
omniidl: Please make sure it is in directory /home/local/NT/jayanthv/omniORB-4.1.4/lib
omniidl: (or set the PYTHONPATH environment variable)

omniidl: (The error was '/home/local/NT/jayanthv/omniORB-4.1.4/lib/_omniidlmodule.so: wrong ELF class: ELFCLASS64')

So, I tried to use the Intel C++ compiler instead, with

export CXX=/opt/intel/Compiler/11.1/080/bin/ia32/icc
export LD_LIBRARY_PATH=/opt/intel/Compiler/11.1/080/lib/ia32
export PYTHON=/home/local/NT/jayanthv/omniORB-4.1.4/bin/omnipython

But, now it complains about ../../../bin/omniidl -bcxx -p../../../src/lib/omniORB -Wbdebug -Wba -p../../../src/lib/omniORB -Wbdebug -v -ComniORB4 ../../../idl/Naming.idl

omniidl: ERROR!

omniidl: Could not open IDL compiler module _omniidlmodule.so
omniidl: Please make sure it is in directory /home/local/NT/jayanthv/omniORB-4.1.4/lib
omniidl: (or set the PYTHONPATH environment variable)

omniidl: (The error was '/home/local/NT/jayanthv/omniORB-4.1.4/lib/_omniidlmodule.so: undefined symbol: __cxa_pure_virtual')

The OS is RHEL 5.5 with x86_64 architecture, and I am trying to build the 32 bit binaries. Would appreciate any insight into this problem.

Was it helpful?

Solution 2

I finally found the magic combination to building omniORB on Linux using Intel compiler.

You see where it complains about '__cxa_pure_virtual' not found, this happens under gcc because it can't find a lib called libstdc++

So, make CC="icc -lstdc++" or CC="gcc -lstdc++" depending on which compiler you are using . Do the same for CXX (if using g++, specify it at g++)

And for Python, I used the omnipython which is a python1.5, PYTHON=bin/omnipython

which means it is looking relative to the omniORB root path.

You can see where it complains about 'wrong ELF class: ELFCLASS64', this is because you are trying to link a 32 bit binary using a 64 bit linker.

So, force your compiler and linker flags to 32.

CFLAGS=-m32 CXXFLAGS=-m32 LDFLAGS=-m32

Once done, run your configure

./configure --prefix=/opt/omniInst --build=i686-pc-linux-gnu

Run gmake followed by gmake install, and you will see all the binaries and libs under omniInst or whichever prefix directory you suggested.

OTHER TIPS

That's because omniidl is implemented as a Python extension module. The Python executable you are using is a 64 bit executable, so it can't load a 32 bit library.

Check this out http://objectmix.com/object/196129-compiling-omniorb-32bits-libraries-64bits-machine-suse.html

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top